当红架构Cloud Native,怎么搭建才能成为上云助攻手?(2)
之前在网易,对稳定性要求很高的产品,其发布流程通常都很曲折,主要原因在于环境的不一致.陈谔的建议是使用Docker实现环境的一致性,Docker容器完整虚拟化了Linux操作系统,将业务代码与运行环境装箱为Docker容器发布到生产环境,差异仅仅为外部注入的配置(如数据库地址等),容器内部文件在开发环境一旦发布则不再变化,从而保证开发环境与生产环境一致. 3、服务化的思维工程化是做业务架构,建立一个高效团队的基础,接下来要考虑的就是服务化的思维.微服务是当下很流行的概念,采用微服务确实能为应用的迭代和架构带来很多好处.但服务化的架构会带来额外的负担,如果一个项目还处在初期阶段,我们的建议则是服务化思维先于服务化架构.
虽然业务初期,不适合服务化,但应该为后续的服务化做一些准备,否则后面想拆分的时候会变得非常困难:
4、实施微服务随着业务的壮大,是否要采用微服务,就要去衡量微服务带来的收益是否大于成本? 收益
成本
降低实施成本
基于Kubernetes简化微服务实施 利用基于Kubernetes的基础设施可以简化微服务,一方面Kubernetes提供了基于域名的服务发现:
Kubernetes还可以做基于iptables的透明RPC分发:
比如,服务A访问服务B的虚拟IP VIP,利用iptables做DNAT,转成B中的所有成员,服务A可以直接,并利用probability特性按权重分发请求,比域名做轮转的负载均衡效果要好,因为iptables可控,域名不可控. 用Kubernetes还可以让你获得自动化运维能力:
Kubernetes以解耦的基础服务层的方式提供了对服务化的支持,避免了代码实现层面的耦合,通过云端托管Kubernetes服务能够将实现服务化的成本大幅降低.而且Kubernetes对业务没有侵入性,实现服务化的代价相对会比较小,后面业务变得非常重,需要细粒度控制时,再用到其它框架也没有什么影响. 我们深度整合了Docker技术和Kubernetes集群编排技术,所以网易云中会有一个Kubernetes Master,所有租户的业务都可以使用这个Master,不用用户自己维护. 5、DevOps前面讲到的都是云原生相关的技术,实际上实现云原生还需要一些研发、运维和组织架构上的方式调整,比如DevOps.DevOps的出现是为了解决运维角色与开发角色的矛盾,运维追求的是可用率优先,而开发希望应用能快速更新迭代. DevOps 与微服务 微服务架构能够支持更高频的迭代,降低更新迭代的风险,这与DevOps的目标是一致;但是微服务架构也会给运维带来成倍的工作量,可基于DevOps分散运维操作,而不是集中依赖少量运维角色. 实施DevOps 实施DevOps需要CI/CD、编排、故障诊断等工具链的支持,同时需要运维实现从操作到审计的职能转换,运维工作前置,在前期和开发团队合作.很多运维还需要开发工具,提高运转效率. 基于DevOps工具链支持微服务架构 1)Jenkins-容器-镜像仓库-服务编排 Pipeline as Code:实施服务化后持续集成的复杂度成倍增加,需要定义大量的流程,包含大量Jobs,以代码的方式管理Pipeline能够支持审计,有效管理复杂性并降低维护成本. 2)日志服务-分布式跟踪系统-性能管理服务 日志服务:Kafka+ELK套件,以网易云为例自动完成容器日志收集,并提供订阅接口可对接ELK. 分布式跟踪系统:在微服务架构下必须要做到与单体架构同样的服务请求的调用路径跟踪能力,才能够有效定位故障.可参考的框架有Zipkin,需要对RPC框架等做instrumentation,在调用过程中携带额外的头信息. (编辑:ASP站长网) |