从系统架构谈起
传统分层架构的缺点(针对复杂系统时)
- 功能集成在一起、复杂性极高、迭代困难
- 构建速度非常慢
- 部署慢启动慢
SOA架构 service-oriented architecture
Enterprise Service Bus 企业服务总线,成为瓶颈
应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。
微服务架构 MIcroservice
- 轻量级协议http/rpc
- 每个微服务维护自己的数据库
- 高内聚低耦合、部署维护更简单
什么是微服务
微服务改造
分离微服务的方法
- 审视并发现分离的业务逻辑
- 借助静态代码分系工具,寻找天生隔离的代码模块
- 根据CPU和内存等资源消耗来分解,提高资源利用效率
常见可微服务话的组件
- 用户和账号管理
- 授权和会话管理
- 系统配置
- 通知和通讯服务
- 照片多媒体
分解原则
- 微服务提供的能力 ( 提供的功能)
- 微服务的功能切分(几个相关功能可以合并成1个组件,有1个团队维护,维护升级简单)
- 微服务切到多小的粒度,不宜过小
微服务间通信
- 点对点
- 用于系统内部多组件间通信
- 有大量重复模块如认证鉴权
- 缺少统一规范和监控审计等功能
- 后期维护 成本高、服务建依赖错综复杂、难以管理
- API网关
- 基于轻量级的message gateway
- 新API注册至gateway
- 整合实现通用功能
理解docker
docker
- 基于linux的Cgroup,Namespace以及UnionFS等技术,对进程进行封装和隔离,属于操作系统层面的虚拟化技术,由于隔离的进程独立于宿主和其他隔离进程,故也称为容器。
- 最初基于LXC,从0.7开始去除LXC,使用自行开发的libcontainerd,从1.11进一步演进为runC和containerd
- docker在容器基础上进行了进一步封装,从文件系统、进程隔离到网络互联等等,极大简化了容器的创建和维护,是的docker比虚拟机技术更加轻便、快捷。
为什么要用docker
- 高效利用系统资源
- 容器技术不需要虚拟操作系统,和宿主机共用内核;虚拟机则需要虚拟内核,会消耗资源
- 更快的启动时间
- 和进程的启动时间一致,快于虚拟机的启动速度
- 一致的运行环境,方便持续交付和部署
- UnionFS提供了一致的运行环境,dockerfile生成的环境
- 更轻松的迁移,维护和扩展
性能对比
docker的优势和劣势
封装性
- 不需要启动内核,应用扩容时可以秒级启动
- 资源利用率高,直接利用宿主机内核调度资源,性能损失小
- 方便的CPU和内存资源管理
- 打包所有依赖,方便交付和分发
隔离性
- 应用环境和宿主机完全隔离
- 多个应用的版本可以并存在宿主机上
社区
- docker命令简单,社区十分活跃,周边组件丰富
镜像增量分发
- 每次传输只传输变化部分,节约带宽