云原生原则及关键技术
开源和商业的平台软件很多,基本上都是基于容器和Kubernetes的生态实现,涵盖CMDB、自动化运维、CI、CD、GitOPS、DevOps等众多领域。云原生是什么?为什么选择云原生?云原生能为我们带来那些好处?
1 云原生交互景观

参考地址:
https://landscape.cncf.io/
https://landscape.cncf.io/images/landscape.png
2 云原生架构有特征
符合12模式(Twelve-Factor App)
- 基准代码
一份基准代码,多份部署 - 依赖
显式声明依赖关系 - 配置
在环境中存储配置 - 后端服务
把后端服务当作附加资源 - 构建,发布,运行
严格分离构建和运行 - 进程
以一个或多个无状态进程运行应用 - 端口绑定
通过端口绑定提供服务 - 并发
通过进程模型进行扩展 - 易处理
快速启动和优雅终止可最大化健壮性 - 开发环境与线上环境等价
尽可能的保持开发,预发布,线上环境相同 - 日志
把日志当作事件流 - 管理进程
后台管理任务当作一次性进程运行
微服务架构(Microservices):独立部署的服务,一次只做一件事
自助服务敏捷基础设施(Self-Service Agile Infrastructure):用于快速、可重复和一致地提供应用环境和服务的平台
面向API接口的通信(API-based Collaboration):服务之间的交互基于接口,而不是本地方法调用
抗脆弱性(Anti-Fragility):系统能抵御高负载
3 云原生架构原则
- DevOps
- Microservices
- Containers
- Security
4 云计算的四个层次
4.1 IaaS(基础架构即服务)
IaaS(Infrastructure as a Service,基础架构即服务)是基础层。在这一层,通过虚拟化、动态化将IT基础资源(计算、网络、存储)聚合形成资源池。资源池即计算能力的集合,终端用户(企业)可以通过网络获得自己需要的计算资源,运行自己的业务系统。这种方式使用户不必自己建设这些基础设施,而是通过付费即可使用这些资源。
4.2 PaaS(平台即服务)
在IaaS层之上的是PaaS(Platform as a Service,平台即服务)层。这一层除了提供基础计算能力,还具备了业务的开发运行环境,提供包括应用代码、SDK、操作系统以及API在内的IT组件,供个人开发者和企业将相应功能模块嵌入软件或硬件,以提高开发效率。
4.3 SaaS(软件即服务)
最上层是SaaS(Software as a Service,软件即服务)。实际上,SaaS在云计算概念出现之前就已经存在,并随着云计算技术的发展得到了更好的发展。SaaS的软件是“拿来即用”的,不需要用户安装,软件升级与维护也无须终端用户参与。同时,它还是按需使用的软件,与传统软件购买后就无法退货相较具有无可比拟的优势。
4.4 DaaS(数据即服务)
越来越多的数据沉淀、抽象形成了新的服务——DaaS(Data as a Service,数据即服务)。数据聚合抽象,把数据转换成通用信息,从而为公众提供公共信息服务。
5 DevOps常用工具
Devops 目的是实现快速交付价值且具有持续改进能力,其核心是加快软件交付流程。
- 项目管理(PM):tapd、禅道、自研等;
- 代码管理:gitlab;
- 持续集成CI(Continuous Integration):gitlab ci;
- 持续交付CD(Continuous Delivery):gitlab cd;
- 镜像仓库:VMware Harbor,私服nexus;
- 容器:Docker;
- 编排:K8S;
- 服务治理:Nacos;
- 脚本语言:Python、go;
- 日志管理:Cat+Sentry,还有种常用的是ELK、CLS;
- 系统监控:Prometheus;
- 负载均衡:Nginx;
- 网关:Kong,SpringCloud Gateway;
- 链路追踪:SkyWalking;
- 产品和UI图:Axure、蓝湖、墨刀;
- 公司内部文档:Confluence、showdoc。
6 云原生的关键技术

6.1 容器
容器雏形最早出现在 1979 年叫 Chroot Jail ,定义于 2008 年 即 LXC(Linux Container),将 Cgroups 的资源管理能力和 Namespace 的视图隔离能力组合在一起,实现进程级别的隔离。
6.2 Kubernetes
声明式的 API 与可扩展(CRD + Controller)的编程接口,先进的设计思想使其在容器编排大战中(Kubernetes、Swarm、Mesos)处于王者地位,成为容器编排系统的事实标准。
6.3 微服务(Microservices)
每个功能都被称为一个独立的服务,可以单独构建和部署,其中某个服务出现故障也不会影响其他的功能模块,这句体现了其针对特定服务发布,影响小,风险小等特点。
6.4 无服务(Serverless)
每个功能都被称为一个独立的服务,可以单独构建和部署,其中某个服务出现故障也不会影响其他的功能模块,这句体现了其针对特定服务发布,影响小,风险小等特点。
6.5 DevOps
提高交付的质量和效率。
6.6 ServiceMesh
ServiceMesh 核心是业务逻辑与非业务逻辑解耦,实现开发只需关注业务逻辑的伟大目标。将一大堆和业务逻辑无关的客户端 SDK(如服务发现,路由,负载均衡,限流降级等)从业务应用中剥离出来,放到单独的 Proxy(Sidecar) 进程中,之后下沉到基础设施中间件 Mesh(类似 TDDL 到 DRDS 的模式)。
6.7 基础设施即代码(IaC)
将基础设施及其完整的生命周期(创建、销毁、扩容、替换)以代码的方式进行描述、通过相应的工具(terraform、ROS、CloudFormation等)编排执行和管理。比如应用用到的所有基础资源(如:ECS、VPC、RDS、SLB、Redis 等),无需在控制台不停的切换页面申请购买,只需定义相应代码,一键创建。
6.8 Cloud IDE
云端 IDE 深入研发的整个生命周期,云端可提供丰富的代码库模板,通过分布式运算提升编译速度,以 “智能” 方式实现代码推荐、代码优化、自动扫描发现 BUG、识别逻辑和系统性风险。
更多推荐
所有评论(0)