精华内容
下载资源
问答
  • 手机淘宝容器化框架,支持组件动态更新、热修复等,一个强大的安卓动态组件框架。
  • 实现将一个接口动态代理,并将该代理对象在spring容器初始完成前注册到spring容器中。实现可以通过@Autowired等注释或其他方法从spring容器中获取该代理对象
  • kubernetes之初始化容器

    千次阅读 2018-07-18 13:03:17
    初始化容器是什么? 在kubernetes中,一个pod可以包含多个容器,其中的init container,顾名思义主要负责初始化工作,一个pod也可以包含多个init container。后文统一用"初始化容器"表示"init ...

    参考:https://kubernetes.io/docs/concepts/workloads/pods/init-containers/

    初始化容器是什么?

    在kubernetes中,一个pod可以包含多个容器,其中的init container,顾名思义主要负责初始化工作,一个pod也可以包含多个init container。后文统一用"初始化容器"表示"init container"。初始化容器也是容器,在pod的定义中,如果将"containers"改成"initContainers",那么这个数组内定义的所有容器就都是初始化容器,定义初始化容器与普通应用容器的语法相同。但是,初始化容器不支持readiness类型探针,这个很容易理解,初始化容器主要负责初始化工作,在它没有运行完成之前pod一定处于未就绪状态(unready),所以readiness类型探针一定会诊断失败,没有意义。另外初始化容器在资源请求与限制方面与普通的应用容器有细微差别,后文详细描述。

    初始化容器先于普通应用容器执行,如果pod有多个初始化容器,那么它们按定义的顺序逐个执行,并且前一个必需执行成功后一个才可以执行,所有的初始化容器执行成功后,普通应用容器才可以执行。当初始化容器执行失败时,如果restart policy是OnFailure或者Always,那么会重复执行失败的初始化容器一直到成功,如果restart policy是Never,则不会重启失败的初始化容器。如果初始化容器执行成功,那么无论restart policy是什么,即使是Always,也不会再次被重启。

    初始化容器的状态可以通过pod的.status.initContainerStatuses字段查看,它的值是一个数组,分别表示每个初始化容器的状态。数组中每个成员的结果与表示普通应用容器状态的结构一样,字段含义相同。

    初始化容器有什么用?

    在开发一个程序时,通常初化代码与主体业务代码放置在同一个程序中。为什么kubernetes提供初始化容器这种功能,将初始化工作从普通容器中隔离出来?这种特性有什么用呢?初始化容器与普通容器有各自独立的image,本质上是将初始化逻辑与主体业务逻辑分离并放置在不同的image中,以下是初始化容器的主要用处:

    • 初始化容器可以包含不能随普通容器一起发布出去的敏感信息。
    • 初始化容器可以包含用户自定义的代码、工具,如sed、awk、python等方便完成初始化、设置工作。
    • 因为初始化逻辑与主体业务逻辑分布在不同的image中,因此image构建者与主体业务逻辑开发者可以各自独立的工作。
    • 初始化容器使用Linux namespace,不同于普通应用容器,具有不同的文件系统视图,并且对于低层的操作系统有更在的访问权限。
    • 当应用启动的前置条件不具备时,初始化容器可以阻止普通应用容器启动,避免在条件不具备时反复启动注定会失败的容器而浪费系统资源。(问题:同一个pod中的多个普通应用容器是否可以编排它们的启动顺序?)

    示例

    以下是如何使用初始化容器的一些想法、idea:

    • 使用shell命令等待某个service可用,类似于编排。如:   for i in {1..100}; do sleep 1; if dig myservice; then exit 0; fi; done; exit 1
    • 使用命令,通过downward API向远程服务注册当前pod,如:curl -X POST http://$MANAGEMENT_SERVICE_HOST:$MANAGEMENT_SERVICE_PORT/register -d ‘instance=$()&ip=$()’
    • 使用命令在启动应用之前延迟一定时间,如sleep 60。
    • 将git repository克隆到volume。
    • 在一个配置文件中写入具体的配置值,然后通过临时工具动态的生成运行应用容器需要使用的配置。如将POD_IP写入一个配置文件,然后通过Jinja生成主应用容器的配置文件。

    以下是具备示例:

    Pod有两个初始化容器,一个等待myservice被创建,第二个等待mydb,当两个服务都创建后,应用容器才会启动。注意,文件中涉及初始化容器的语法适用于1.8及以后的版本。

    apiVersion: v1
    kind: Pod
    metadata:
      name: myapp-pod
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp-container
        image: busybox
        command: ['sh', '-c', 'echo The app is running! && sleep 3600']
      initContainers:
      - name: init-myservice
        image: busybox
        command: ['sh', '-c', 'until nslookup myservice; do echo waiting for myservice; sleep 2; done;']
      - name: init-mydb
        image: busybox
        command: ['sh', '-c', 'until nslookup mydb; do echo waiting for mydb; sleep 2; done;']

    以下是myservice与mydb:

    kind: Service
    apiVersion: v1
    metadata:
      name: myservice
    spec:
      ports:
      - protocol: TCP
        port: 80
        targetPort: 9376
    ---
    kind: Service
    apiVersion: v1
    metadata:
      name: mydb
    spec:
      ports:
      - protocol: TCP
        port: 80
        targetPort: 9377

     启动与调试pod:

    $ kubectl create -f myapp.yaml
    pod "myapp-pod" created
    $ kubectl get -f myapp.yaml
    NAME        READY     STATUS     RESTARTS   AGE
    myapp-pod   0/1       Init:0/2   0          6m
    $ kubectl describe -f myapp.yaml
    Name:          myapp-pod
    Namespace:     default
    [...]
    Labels:        app=myapp
    Status:        Pending
    [...]
    Init Containers:
      init-myservice:
    [...]
        State:         Running
    [...]
      init-mydb:
    [...]
        State:         Waiting
          Reason:      PodInitializing
        Ready:         False
    [...]
    Containers:
      myapp-container:
    [...]
        State:         Waiting
          Reason:      PodInitializing
        Ready:         False
    [...]
    Events:
      FirstSeen    LastSeen    Count    From                      SubObjectPath                           Type          Reason        Message
      ---------    --------    -----    ----                      -------------                           --------      ------        -------
      16s          16s         1        {default-scheduler }                                              Normal        Scheduled     Successfully assigned myapp-pod to 172.17.4.201
      16s          16s         1        {kubelet 172.17.4.201}    spec.initContainers{init-myservice}     Normal        Pulling       pulling image "busybox"
      13s          13s         1        {kubelet 172.17.4.201}    spec.initContainers{init-myservice}     Normal        Pulled        Successfully pulled image "busybox"
      13s          13s         1        {kubelet 172.17.4.201}    spec.initContainers{init-myservice}     Normal        Created       Created container with docker id 5ced34a04634; Security:[seccomp=unconfined]
      13s          13s         1        {kubelet 172.17.4.201}    spec.initContainers{init-myservice}     Normal        Started       Started container with docker id 5ced34a04634
    $ kubectl logs myapp-pod -c init-myservice # Inspect the first init container
    $ kubectl logs myapp-pod -c init-mydb      # Inspect the second init container

    由以上输出可以看出,pod中唯一的应用容器没有到达"ready"阶段,状态显示需要成功执行两个初始化容器,但目前执行成功的个数是0。进一步确认,pod处于peding状态,初始化容器1已经成功运行,但是无法成功结束,所以整个pod被阻塞在了pending状态。通过kubectl logs可分别查看两个初始化容器的日志。

    创建myservice与mydb服务,再确认pod状态:

    $ kubectl create -f services.yaml
    service "myservice" created
    service "mydb" created
    $ kubectl get -f myapp.yaml
    NAME        READY     STATUS    RESTARTS   AGE
    myapp-pod   1/1       Running   0          9m

     可以看到,pod完全处于ready阶段,状态显示为running,表明两个初始化容器已经成功结束。

    初始化容器详细行为

    初始化容器先于普通应用容器启动,如果有多个则按定义顺序逐个启动,并且前一个必需成功后才可以启动后一下,所有的都成功后才可以启动应用容器。关于初始化容器与restart policy,前文已描述。需要注册的是,网络与volume的初始化要先于初始化容器,或者说pod的pause根容器先于初始化容器启动。

    当初始化容器正在运行时,整个pod处于pending阶段,状态为Initializing。如果整个pod被restart,则所有容器包括初始化容器也要再运行一次。

    对初始化容器的变更仅限于image字段,其它字段不可以再行更改。变更初始化容器的image字段会导致整个pod重新启动。

    初始化容器可以被重启、重复运行多次。因些注意解决"幂等"问题,如初始化容器第一次运行时创建文件并写入内容,那么第二次运行时文件已经存在并且已经有内容,要注意解决这类问题。

    资源请求与限制

    以几下几条规则:

    • 初如化有效初始化request/limit(effective init request/limit):指的是所有初始化容器request/limit的最大值,就是从初始化容器中取最大值。
    • pod有效初始化request/limit的值要比以下值都高:
      1.初如化有效初始化request/limit
      2.各应用容器request/limit的总合
    • Scheduling is done based on effective requests/limits, which means Init Containers can reserve resources for initialization that are not used during the life of the Pod.
    • QoS tier of the Pod’s effective QoS tier is the QoS tier for Init Containers and app containers alike.

    初始化容器重启原因

    • 修改初始化容器的image会导致整个pod重启,但是,更新应用容器的image只会导致相应的容器重启,而不是整个pod。
    • 根容器重启导致整个pod重启,初始化容器也会重启。这种情况很少见。
    • 初始化容器执行成功记录丢失
    展开全文
  • Android动态化方案

    千次阅读 2018-06-23 17:11:58
    目前接触到的Android几种动态化方案:1、WebView2、插件化3、ReactNative4、热修复5、小程序

    目前接触到的Android几种动态化方案:

    1、WebView

    2、H5/Hybird

    3、插件化

    4、ReactNative

    5、热修复

    6、小程序

    一、WebView

    WebView是最常见的一种动态化方案,跨平台(Android/iOS),可以不依赖于发版实时更新,其劣势在于体验和性能不如NA的体验,有些功能需要依赖客户端提供端能力实现。

    二、Hybird

    Hybird是一种NA + Web的混合开发模式,底层依赖于Native提供的容器,上层使用Html&Css&JS做业务开发,底层透明化、上层多样化,这种场景非常有利于前端介入,非常适合业务快速迭代,对于需要快速试错、迅速占领市场的团队来说,Hybrid一定是不二的选择。但Hybird的体验肯定比不上Native,所以生存下来后还是需要做体验更好的原生APP。

    三、插件化

    插件化技术的出现一个大背景是Android有一个史上最坑的天花板 —— 65535方法数的限制,它要求在Android的一个dex文件中的方法数不能超过65535个方法。随着业务逻辑的复杂导致客户端代码的急剧膨胀,很容易就碰触到了65535方法数的限制。有人提出了通过拆分dex的方法规避天花板的限制,但随着代码量和各种资源的不断增大,导致一次编译、运行、调试的速度降低,启动速度慢,导致开发成本高、用户体验变差。

    在运营为王的时代对模块的热更新提出了更高的要求,所谓热更新就是在不依赖发版的情况下,对业务进行实时的更新,也可以对客户端一些线上问题进行实时修复。在业务层面,功能模块的解耦以及维护团队的分离是大势所趋,各个团队维护着同一个APP的不同模块,如果每个模块升级新功能都要对整个APP进行升级,那么发布流程不仅复杂而且效率低下,在讲究小步快跑和持续迭代的互联网时代,对开发效率和版本迭代速度有更高的要求。

    插件化的方案可以解决宿主APK中的Java方法数限制;宿主APP可以不通过系统安装和使用插件APK;可以只在指定的时候才加载作为功能模块的APK;插件APK同一套代码可以作为插件和独立运行的APK;兼容Android所有版本(AndroidP待定)。

                                           

    四、ReactNative

    ReactNative(简称RN)是Facebook于2015年4月开源的跨平台移动应用开发框架,致力于提高多平台开发的开发效率 —— Learn once, write anywhere,跨平台(支持iOS/Android)。

    关于H5、NA和RN应用的对比分析,可见文章:http://vczero.github.io/react_native/H5-React-Native-Native.html

    五、热修复


    展开全文
  • 在kubernetes1.3的POD中,有两类容器,一类是系统容器(POD Container),一类是用户容器(User Container),在用户容器中,现在又分成两类容器,一类是初始化容器(Init Container),一类是应用容器(App ...

    在kubernetes1.3的POD中,有两类容器,一类是系统容器(POD Container),一类是用户容器(User Container),在用户容器中,现在又分成两类容器,一类是初始化容器(Init Container),一类是应用容器(App Container),其中应用容器包含卷容器(Volume Container)。下面看看kubernetes1.3中同POD相关的各个实体信息:


    在PodSpec中,可以看到有两个同容器相关的变量,分别是InitContainers和Containers,其中变量InitContainers代表初始化容器,变量Containers代表应用容器,这两个容器都对应相同的容器实体,如下图所示:


    其中POD同容器的对应关系如下图所示,从图中可以看出来,POD同初始化容器之间的对应关系是从0到N,POD同应用容器之间的对应关系是从1到N。


    初始化容器是kubernetes1.3的新特性,初始化容器适用下面几个使用场景:

    一、如果容器中的应用使用到了一个外部服务,需要等这个外部服务可以访问之后才能启动容器中的应用。

    我们可以通过下面的配置文件来简单实现:

    pod:
    
      spec:
    
        initContainers:
    
        - name: wait
    
          image: centos:centos7
    
          command:["/bin/sh", "-c", "for i in {1..100}; do sleep 1; ifdig dnsservice; then exit 0; fi; exit 1"]
    
        containers:
    
        - name: run
    
          image: application-image
    
          command: ["/application_that_depends_on_dnsservice"]
    在这个例子的POD中定义了一个初始化容器,名称是wait,这个初始化容器其实就是执行dig命令,Dig是一个在linux命令行模式下查询DNS包括NS记录,A记录,MX记录等相关信息的工具。这个初始化容器写的比较简单,就是等待100秒的时间,在这100秒的时间内,如果访问dnsservice成功,那么就退出。这个例子的POD中还定义了一个应用容器,名称是run,这个应用容器等待初始化容器执行成功,然后才运行应用“application_that_depends_on_dnsservice”。

    这种场景适合两个POD协同工作,第一个POD负责dnsservice,第二个POD负责访问第一个POD,这两个POD中的应用容器启动有先后顺序,第二个POD中的应用容器必须要等第一个POD中的应用容器启动后才能启动。

    二、我们知道kubernetes中POD是具有IP的,但是POD的IP是动态生成的,所以无法提前获取POD的IP。但是存在一个使用场景,要求POD中的应用容器访问外部服务,但是这个外部服务需要提前进行客户端IP和端口注册,之后才可以正常提供服务。

    我们可以通过下面的配置文件来简单实现:

    pod:
    
      spec:
    
        initContainers:
    
        - name: register
    
          image: centos:centos7
    
          command:["/bin/sh", "-c", "curl -X POST http://$SERVICE_HOST:$SERVICE_PORT/register-d 'instance=$(POD_NAME)&ip=$(POD_IP)'"]
    
          env:
    
          - name: POD_NAME
    
            valueFrom:
    
              field: metadata.name
    
          - name: POD_IP
    
            valueFrom:
    
              field: status.podIP
    
        containers:
    
        - name: run
    
          image: application-image
    
          command: ["/application_that_depends_on_service"]
    在这个例子的POD中定义了一个初始化容器,名称是register,这个初始化容器会http访问主机SERVICE_HOST的register服务,并将POD注册上。在POD注册到了主机SERVICE_HOST后,应用容器run才开始运行应用“application_that_depends_on_service”。这种场景适合动态使用POD信息。

    三、要求POD中的应用容器启动后等待一段时间在运行,但是不想在应用中通过sleep进行等待。

    我们可以通过下面的配置文件来简单实现:

    pod:
    
      spec:
    
        initContainers:
    
        - name: wait
    
          image: centos:centos7
    
          command:["/bin/sh", "-c", "sleep 60"]
    
        containers:
    
        - name: run
    
          image: application-image
    
          command: ["/application_without_sleep"]
    在这个例子的POD中定义了一个初始化容器,名称是wait,这个初始化容器会sleep 60秒,之后应用容器run才开始运行应用“application_without_sleep”。

    四、POD中的容器应用容器需要实现自动从代码仓库中获取代码,并进行操作。

    我们可以通过下面的配置文件来简单实现:

    pod:
    
     spec:
    
       initContainers:
    
        -name: download
    
         image: image-with-git
    
         command: ["git", "clone","https://github.com/myrepo/myrepo.git", "/var/lib/data"]
    
         volumeMounts:
    
         - mountPath: /var/lib/data
    
           volumeName: git
    
       containers:
    
        -name: run
    
         image: centos:centos7
    
         command: ["/var/lib/data/exec"]
    
         volumeMounts:
    
         - mountPath: /var/lib/data
    
           volumeName: git
    
       volumes:
    
        -emptyDir: {}
    
         name: git
    在这个例子的POD中定义了一个初始化容器,名称是download,这个初始化容器会挂载宿主机上的存储目录"/var/lib/data",从代码仓库https://github.com/myrepo/myrepo.git克隆一份到"/var/lib/data"上。应用容器run接着会挂载宿主机上的存储目录"/var/lib/data",然后执行“exec”命令。

    以此类推,初始化容器可以应用到很多场景中。

    对于具有初始化容器的POD来说,对POD的资源配额限制按照如下规则:

    1、  查找初始化容器request/limit的最大值;

    2、  计算应用容器request/limit的汇总;

    3、  将应用容器request/limit的汇总值同初始化容器request/limit的最大值进行比较,按照最大值来作为POD的资源配额限制。

    我们来看下面具有初始化容器的POD资源配额限制的例子:

    pod:
    
      spec:
    
        initContainers:
    
        - limits:
    
            cpu: 100m
    
            memory: 1GiB
    
        - limits:
    
            cpu: 50m
    
            memory: 2GiB
    
        containers:
    
        - limits:
    
            cpu: 10m
    
            memory: 1100MiB
    
        - limits:
    
            cpu: 10m
    
            memory: 1100MiB
    在这个例子中,POD中limit的资源限制是:CPU: 100m, 内存: 2200MiB。计算方法如下:

    1、  初始化容器limit的CPU最大值是100m,内存最大值是2GiB;

    2、  应用容器limit的汇总CPU是20m,内存是2200MiB;

    3、  将上面1和2的数值进行比较,取最大值,CPU是100m,内存是2200MiB。

    我们来看下面具有初始化容器的POD资源配额限制的例子:

    pod:
    
      spec:
    
        initContainers:
    
        - limits:
    
            cpu: 100m
    
            memory: 1GiB
    
        containers:
    
        - request:
    
            cpu: 10m
    
            memory: 1100MiB
    在这个例子中,POD中request的资源限制是:CPU:10m,内存1100MiB;POD中limit的资源限制是:CPU:100m,内存1GiB。计算方法同上。

    在Kubernetes中,POD的QoS服务质量一共有三个级别,如下图所示:


    这三个QoS级别介绍,可以看下面表格:

    QoS级别

    QoS介绍

    BestEffort

    POD中的所有容器都没有指定CPU和内存的requests和limits,那么这个POD的QoS就是BestEffort级别

    Burstable

    POD中只要有一个容器,这个容器requests和limits的设置同其他容器设置的不一致,那么这个POD的QoS就是Burstable级别

    Guaranteed

    POD中所有容器都必须统一设置了limits,并且设置参数都一致,如果有一个容器要设置requests,那么所有容器都要设置,并设置参数同limits一致,那么这个POD的QoS就是Guaranteed级别

     

    对于具有初始化容器的POD来说,对POD的QoS服务质量限制按照如下规则:

    1、  查找初始化容器的最高QoS;

    2、  查找应用容器的最高QoS;

    3、  将初始化容器的最高QoS同应用容器的最高QoS进行比较,按照高的QoS服务质量作为POD的QoS服务质量限制。

    我们来看下面具有初始化容器POD的QoS服务质量的例子:

    pod:
    
     spec:
    
       initContainers:
    
        -request:
    
           cpu: 10m
    
           memory: 1GiB
    
        -limits:
    
           cpu: 100m
    
           memory: 1100MiB
    
       containers:
    
        -request:
    
           cpu: 10m
    
           memory: 1GiB
    
        -limits:
    
           cpu: 100m
    
           memory: 1100MiB
    在这个例子中,POD的QoS服务质量是Burstable,计算方法如下:

    1、  初始化容器的QoS是Burstable;

    2、  应用容器的QoS是Burstable;

    3、  将1和2的QoS服务质量进行比较,取高的QoS,因为1和2相同,所以POD的QoS服务质量是Burstable。

    综上所述,介绍了kubernetes1.3中POD的初始化容器相关结构体、适用场景、资源配额和QoS服务质量,在kubernetes1.3中初始化容器还是阿尔法特性,也就是还处在研发开发阶段,但是我们可以发现通过初始化容器可以解决现实生产环境中的很多问题,对初始化容器这个新特性,我还是充满了期待的。


    展开全文
  • 动态注入Bean到Spring容器

    万次阅读 2017-08-18 15:42:12
    因此需要将dubbo通过jdk代理创建接口动态代理bean添加到Spring容器,搜索了一下帖子,说的都很简单,可能动态注入bean到Spring就那么简单,下面梳理了应用的流程。 首先无论你可以明确的拿到Applic...

    最近使用dubbo时遇到如下问题,使用@Reference注解时,其注入的属性并没有在Spring容器中进行管理,导致Spring的AOP对服务接口中的方法无法进行织入操作。因此需要将dubbo通过jdk代理创建接口动态代理bean添加到Spring容器,搜索了一下帖子,说的都很简单,可能动态注入bean到Spring就那么简单,下面梳理了应用的流程。

     

    首先无论你可以明确的拿到ApplicationContext上线对象,因为拿不到上下文对象,一切都免谈。

     

    通过ApplicationContext获得Spring的BeanFactory,有如下两种方式

     

    1、DefaultListableBeanFactory beanFactory = (DefaultListableBeanFactory)applicationContext.getParentBeanFactory()

     

     

    2、DefaultListableBeanFactory beanFactory = (DefaultListableBeanFactory)applicationContext.getAutowireCapableBeanFactory();

    2用于存储Spring容器管理之外的Bean,Spring内部很少使用,应用有些情况通过1拿到的beanFactory是null,特别是在应用第三方框架时,dubbo中遇到过。
     

     

    beanFactory拿到后,注入一个新的Bean到Spring容器中

     

    		//根据obj的类型、创建一个新的bean、添加到Spring容器中,
    		//注意BeanDefinition有不同的实现类,注意不同实现类应用的场景
    		BeanDefinition beanDefinition = new GenericBeanDefinition();
    		beanDefinition.setBeanClassName(obj.getClass().getName());
    		beanFactory.registerBeanDefinition(obj.getClass().getName(), beanDefinition);//根据obj的类型、创建一个新的bean、添加到Spring容器中,
    		//注意BeanDefinition有不同的实现类,注意不同实现类应用的场景
    		BeanDefinition beanDefinition = new GenericBeanDefinition();
    		beanDefinition.setBeanClassName(obj.getClass().getName());
    		beanFactory.registerBeanDefinition(obj.getClass().getName(), beanDefinition);

    注意此时放入到Spring容器的Bean并非是单例模式的,可以有重复的bean,取值的时只能通过obj.getClass().getName()获得Bean而不能通过类型获得Bean。这是需要注意的地方。此种方式除了不是单例以外,跟Spring加载一个bean的流程基本一致。包括AOP的逻辑处理

     

     

    一般重复注入一个新Bean的情况较少,多数情况都是讲已有的Bean注入到容器中,

     

    		applicationContext.getAutowireCapableBeanFactory().applyBeanPostProcessorsAfterInitialization(obj, obj.getClass().getName());
    		beanFactory.registerSingleton(obj.getClass().getName(), obj);applicationContext.getAutowireCapableBeanFactory().applyBeanPostProcessorsAfterInitialization(obj, obj.getClass().getName());
    		beanFactory.registerSingleton(obj.getClass().getName(), obj);

    第一行:让obj完成Spring初始化过程中所有增强器检验,只是不重新创建obj,

     

    第二行:将obj以单例的形式入驻到容器中,此时通过obj.getClass().getName()或obj.getClass()都可以拿到放入Spring容器的Bean。
     

    根据具体需求、选择不同的方式动态将Bean注入到Spring容器,就这么简单。

     

     

     

     

     

     

     

     

     

    展开全文
  • 容器和云原生(一):初识容器化和云原生

    千次阅读 多人点赞 2021-01-29 15:49:45
    目前亟待增加裸金属服务器配置相关知识和云原生相关内容,那就从容器化和云原生下手,本节把基于k8s的容器化知识挂载到自己的知识树上,然后在测试环境进行开发测试; 一、理解容器化 什么是容器 容器是云原生...
  • 对虚拟容器技术的理解总结

    千次阅读 2020-06-09 17:19:58
    因为项目需求,最近在学习虚拟容器技术,在网上看到了很多关于这方面的知识,所以在这里写一篇博客简单总结一下这段时间学习的收获。 虚拟 虚拟技术其实是一种将计算机物理资源进行抽象、转换为虚拟的...
  • 外卖客户端容器化架构的演进

    千次阅读 2020-09-30 20:01:48
    总第413篇2020年 第37篇好的架构要不断演变,进而去适应业务的发展。美团在移动端上的架构,也经历了组件、平台、RN混合,到现在开始向容器化变迁。容器化架构充分地利用了现在的跨...
  • 美团外卖前端容器化演进实践

    千次阅读 2019-11-28 20:00:43
    总第372篇2019年 第50篇提单页在美团外卖交易链路中非常重要,但随着业务不断发展,提单页模块越来越多,逻辑的耦合也越来越重。为了解决这一问题,需要实现提单页的动态化,而动态化是需要...
  • Java面试题大全(2020版)

    万次阅读 多人点赞 2019-11-26 11:59:06
    final 修饰的变量叫常量,常量必须初始,初始之后值就不能被修改。 5. java 中的 Math.round(-1.5) 等于多少? 等于 -1,因为在数轴上取值时,中间值(0.5)向右取整,所以正 0.5 是往上取整,负 0.5 是直接...
  • 各个服务组件中的各个模块则采用虚拟化容器Docker进行资源隔离,提高了资源利用率,同时也保证了安全性。在基于容器的分布式资源管理平台之上,可以构建类似于视频流服务、深度学习计算框架等服务,形成媒体智能处理...
  • 一篇文章搞懂最流行的容器化技术Docker!
  • Spring官网阅读(一)容器及实例

    千次阅读 多人点赞 2020-03-10 23:22:08
    不管是之前关于动态代理的文章,还是读Spring的官网,都是为了之后对Spring的源码做更全面细致的学习,所以在这个过程中,不会涉及过多底层的代码,更多是通过例子证明我们在官网得出的结论,希望自己可以坚持下来,...
  • 嵌入式设备的容器化App

    千次阅读 2019-06-10 10:15:52
    为此,我们开始了一个边缘设备软件的开发原型项目(Edge Device),目标是在一个小型cortex-A SoC 嵌入式平台上开发一个容器化APP 环境。构建边缘设备容器化APP 的概念平台。它具有如下特点 -采用 linux OS 。 ...
  • 应用容器化之Kubernetes实践

    万次阅读 2016-08-15 08:34:09
    主要以ZooKeeper、Redis、Kafka、MongoDB等应用容器化在Kubernetes平台上面实践。从计算、网络、存储方面解析应用在集成中的问题,以及部分传统应用在容器化过程中设计的应用二次开发等问题。首先介绍应用Docker的...
  • 作者 |张晓宇(衷源) 阿里云容器平台技术专家 关注『阿里巴巴云原生』公众号,回复关键词“1010”,可获取本文 PPT。 导读:资源利用率一直是很多平台管理和研发人员关心的话题。本文作者通过阿里巴巴容器平台团队...
  • Docker技术( 容器虚拟技术 )

    万次阅读 多人点赞 2019-10-18 19:59:21
    Docker虚拟化容器技术 第一章 Docker简介诞生背景Docker 介绍虚拟机技术容器虚拟化技术官方网址第二章 Docker安装前提条件安装DockerDocker底层原理Docker结构图工作原理Docker为什么比VM快第三章 Docker常用命令...
  • 虚拟化容器Docker

    万次阅读 2019-10-24 17:29:03
    容器技术是和我们的宿主机共享硬件资源及操作系统,可以实现资源的动态分配。容器包含应用和其所有的依赖包,但是与其他容器共享内核。容器在宿主机操作系统中,在用户空间以分离的进程运行。 容器技术是实现操作...
  • Kubernetes 是 Google 开源的容器集群管理系统,它构建在目前流行的 Docker 技术之上,为容器化的应用提供资源调度、部署运行、服务发现、扩容缩容等一整套功能,用于容器集群的自动部署、扩容以及运维的开源平台...
  • Android容器化/组件方案

    千次阅读 2017-09-25 10:31:55
    Android容器化方案撰写日期:2017-6-1 作者:庄文志项目背景项目在初期,因为功能少,项目紧张,我们只会在耦合度较高的情况下进行开发,各功能的耦合上如下:1)在这种情况下,各个模块之间耦合度高,各模块之间...
  • 创建动态代理对象bean,并动态注入到spring容器

    万次阅读 多人点赞 2019-04-30 00:48:19
    这里mybatis就用到了JDK动态代理,并且将生成的接口代理对象动态注入到Spring容器中。 这里涉及到几个问题。也许有同学会有疑问,我们直接编写好类,加入@Component等注解不是可以注入了吗?或者在配置类(@...
  • 容器化 云原生的发展历程 云原生技术生态现状 云原生基金会 —— CNCF 云原生技术社区 云原生技术产业 我们正处于时代的关键节点 2019 年,云原生技术普及元年 云原生代表技术 “12要素” 基准代码 依赖 ...
  • 从VM是多了一层Guest OS可以看出,一个OS是一上来就需要固定的硬件配置,以维持此操作系统的运行,docker是需要多少内存就像物理机请求多少(动态分配 ),而虚拟技术则是一开始就分配好了 ...
  • 使用Boost做对象序列是非常方便的,本文将介绍一种序列STL标准容器的方法。 这是之前设计的异步框架的一个子功能:过程A将标准容器数据序列成二进制流,然后将该二进制数据发送到过程B,过程B将数据反序列...
  • 应用容器化 对于微服务架构来说,服务拆分的越多,运维的成本也就越高,以前的一个系统只需要部署一次就可以了,但拆分成多个服务后,就需要多次部署了,为了简化部署流程,容器化成了该问题的最佳解决方案。 制作...
  • 2020最新Java常见面试题及答案

    万次阅读 多人点赞 2019-10-26 15:53:35
    面试题包括以下十九个模块:Java 基础、容器、多线程、反射、对象拷贝、Java Web 模块、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、Mybatis、RabbitMQ、Kafka、Zookeeper、...
  • 目录 引言 … 1 关于本书 … 1 版本 … 1 本书不包含的内容 … 2 本书的目标读者 … 2 如何使用本书 … 2 微服务和容器示例应用:ESHOPONCONTAINERS … 2 请向我们发送您的反馈 … ...Docker容器和虚拟机之间的对比...
  • 容器化ICT融合初体验

    万次阅读 2016-08-19 13:03:42
    【编者的话】本次将分享的容器化ICT融合平台是一种面向未来ICT系统的新型云计算PaaS平台,它基于容器这一轻量级的虚拟技术以及自动的“微服务”管理架构,能够有效支撑应用快速上线和自动扩缩容,最大IT基础...
  • 动态替换Spring容器中的Bean

    千次阅读 2019-11-17 00:57:29
    最近在编写单测时,发现使用 Mock 工具预定义 Service 中方法的行为特别难用,而且无法精细的实现自定义的行为,因此想要在 Spring 容器运行过程中使用自定义 Mock 对象,该对象能够代替实际的 Bean 的给定方法。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 293,826
精华内容 117,530
关键字:

动态化容器