基于容器技术的云原生架构设计

咨询服务具体工作流程请参见 咨询服务方法论

云原生架构设计

运用容器技术进行软件架构设计,可以在不同云平台上部署使用, 包括主流公有云平台,如 AWS / Azure / GoogleCloud / Aliyun 等公有云。

对于企业客户,业务才是最大,任何超出核心需求的软件能力都是多付出的成本。 其中最直观的业务指标就是用户访问并发量。海量用户意味着需要更多的服务实例,运维成千上万的服务实例和各种软件工具和环境,就需要“云原生计算环境”。 用户访问量和软件复杂度,基本上可以认为是两个维度。

充分运用云原生的6个支柱设计原则:

  • Operational excellence 卓越运营
  • Security 安全
  • Reliability 可靠性
  • Performance efficiency 性能效率
  • Cost optimization 成本优化
  • Sustainability 可持续性

运作一个商业公司,首先是让其运营起来,是第一大支柱卓越运营的内容。

接下来业务面临的问题就是安全性,在软件体系中,操作系统、编程语言、开发框架都有安全的实现,合理的利用平台和语言提供的安全能力。

然后是可靠性,即业务需要不间断的保障运行。可靠性对于现实商业公司来说非常重要。

互联网时代,使用业务的用户从数千陡然增加到上亿数量级,又有秒杀、抢红包这样短时间集中的业务。所以,我们需要的是弹性处理机制,业务流量上来时,扩展业务程序实例满足访问请求,平静时再回弹来释放资源。

可靠性是重点功能,如今的K8s,目标就是满足这个需求,Pod包含容器运行单元,可以在机器节点间调度,同时定义了Service,DNS发现机制,来保证服务的可靠性。 下一个关注的支柱是性能效率。使用合适的软件技术来完成业务目标,多种语言协同工作,使用不同种类的数据库更合适的完成任务。通过事件驱动和无服务器这些技术方式,减少服务之间的耦合性,提升系统整体效率。

通过合理的利用云资源,可以优化成本,只在使用服务时为用到的资源付费。同时可以量化支出,变间隔性的大额支出为持续性小额花费。

落地技术

K8s最核心的功能,就是pod中包含的微服务,可以方便的在若干节点间迁移,同时服务注册和发现会自动变化,对于服务使用者完全透明。 微服务用容器进行封装,可以使用任何语言开发,相互通信协作。 业务微服务建议为无状态,便于弹性伸缩,但K8s同时提供了StatefulSet,可以定义有状态的工作负载。 在实际业务开发中,业务状态信息是无处不在的,可以存放在各种数据库或缓存服务中,也有K8s统一管理维护。 业务服务程序会提供生存、健康信息端点,告诉外界自身的运行状态。 如SpringBoot通过简单定义就可以提供这样的信息端点,而K8s会实时监控这些信息,如果工作不正常了,就销毁重新创建一个Pod。

可以认为云原生技术最核心的就是K8s和容器。对于运维人员,管理、监控、Devops等技术都会涉及;而对于开发人员,微服务、服务治理、响应式编程方法、编程语言适应、EDA等也都需要熟悉。

这就是“云原生”之道。K8s包含的工作负载可以数十万计甚至更多,像一支纪律严明的军队,各自为战又协作配合的完成军事任务。

技术参考

更为详细的技术说明,请参考,

培训课程:

技术博文 云原生软件设计-以客户需求为中心