云原生实践

文章目录

  • 1 云原生的特点
    • 1.1 面向微服务框架
    • 1.2 自服务敏捷架构
    • 1.3 基于API的协作
    • 1.4 符合12因素应用
    • 1.5 抗脆弱性
  • 2 云原生的技术
  • 3 云原生的实践
    • 3.1 编码实践
    • 3.2 架构设计
    • 3.3 部署

云原生这个词已经听得特别多了,关于它的概念它的历史它的社区我就不在累述了,大家可以找一下资料了解,这里我想聊的是云原生的特点及实践。

1 云原生的特点

云原生就是在云上运行的

1.1 面向微服务框架

微服务是一种软件框架,将一个大型系统拆分为多个独立自治的微服务。主要特点是:
1)单一职责
2)独立自治性
3)简化复杂应用
4)简化应用部署
5)灵活组合
6)可扩展性
7)技术异构性
8)高可靠性、高容错性

1.2 自服务敏捷架构

敏捷开发我们会想到的就是DevOps。敏捷架构就是让开发人员能够持续集成和持续交付(CI/CD),快速交付高质量的应用程序。好处是
1)减少人工操作的错误
2)快速迭代
3)避免重复工作。

1.3 基于API的协作

API协助其实是为了减少彼此依赖,同时也是为了封闭内部信息,让依赖只关心自己关心的问题。这里的API设计其实还需要加上声明式三个字。声明式API设计是一种软件设计理念,是相对于过程式设计。过程式设计是我们要描述事物到达目标的一系列操作,而声明式是我们告诉系统最终期望,系统不断向该最终期望驱动。

1.4 符合12因素应用

因素 描述
基准代码 一份基准代码,多份部署
依赖 显式声明依赖关系
配置 应用配置存储在环境中,与写代码分离
后端服务 通过网络调用的其他后端服务单作应用的附加资源
构建、发布、运行 严格分离构建、发布和运行流程
进程 一个或多个无状态进程运行应用
端口绑定 通过端口绑定提供服务
并发 通过进程模型进行扩展
易处理 快速启动和优雅终止的进程可以最大化应用的健壮性
开发环境和线上环境一致性 尽可能保证开发环境、预发环境和线上环境的一致性
日志 把日志单作事件流的汇总
管理进程 把后台管理任务单作一次进程运行

1.5 抗脆弱性

这个很容易理解,原先的单体架构最大的弱点就是其单点的薄弱,一旦挂了,系统即不可用。而云原生要求你必须是可复制、可扩展、快速恢复、多机房等部署方式,分布式设计增加系统的抗脆弱性。

2 云原生的技术

要达到云原生的要求,那么必须有一些必备的技术
1)容器
2)微服务
3)服务网格
4)DevOps
5)不可变基础设施
6)声明式API

3 云原生的实践

这里实践是说在设计系统时,如果要符合云原生,我们需要做到注意事情,或者我们的架构设计应该偏向于那种方式。

3.1 编码实践

1)配置管理使用配置中心。从部署上考虑,无论开发环境和生产环境都要尽量保持一致,那么配置化(如数据库、第三方api等配置)都会影响部署代码不一致,所以最好通过环境变量来读取配置中心的配置。从安全性考虑,将一些资源地址密钥放在部署包中是非常不安全的。在云原生或者云服务中,都会提供安全性的配置管理中心。
2)采用API方式访问其它后端服务
3)后端无状态设计,即在后端每次都是一个线程或者进程来处理任务,但是要有状态存储在后端服务
4)日志打印规范,可以采用统一的日志格式或者云服务提供的日志方式,这个对可观测性平台也好、服务治理也好,都会提供较好的接入方式

3.2 架构设计

1)微服务架构,一定要采用微服务架构,如果不能,将每个服务都是采用类似springboot搭建,方便后续改为微服务或者以服务方式发布。
2)容器化设计。我们知道云原生有一个关键技术就是容器。其实云原生之所以发展起来,容器启动至关重要的作用。因此系统设计一定要容器化部署。
3)对于基础服务和第三方组件,如缓存、数据库、消息队列等等,设计时尽快可能剥离你的业务,因为在云上这些都是以服务出现,搬上云的基本上就是你的核心业务,其它都是使用云上基础设施。
4)DDD领域驱动设计。有人说这是一个概念,确实是一个概念,但是更多的是在你实践过程中,你发现你必须深入了解业务,不然第一步你就走不下去,因为要划分域,而域的划分跟业务紧密相连。很多人实现DDD不下去的原因,我觉得有很大部分就是因为没有深入了解业务。我反而觉得DDD是最好划分服务的一套理论,因此当你能够使用DDD在你的项目中,说明你很好深入了解业务,说明你对领域每个模块都很清楚。这对云原生有什么帮助?因为云原生会将大部分基础设施视为服务,那么这时候就很有利于你上云。

3.3 部署

1)利用DevOps平台,要快速的迭代就需要一个DevOps平台。
2)这部署时,对应第三方的访问,一定要利用无论是微服务的服务发现还是网关,这样才能让你的依赖像服务一样提供给你。
3)保持研发、测试、生产环境的一致性,这样既能减少你排查问题的困难度,也对于迁移云上部署的方便性。

你可能感兴趣的:(4,Web服务器,容器化和云原生,云原生,运维,微服务,devops)