从系统架构谈起

传统分层架构的缺点(针对复杂系统时)

  • 功能集成在一起、复杂性极高、迭代困难
  • 构建速度非常慢
  • 部署慢启动慢

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生成的环境
  • 更轻松的迁移,维护和扩展

性能对比

image.png

docker的优势和劣势

封装性

  • 不需要启动内核,应用扩容时可以秒级启动
  • 资源利用率高,直接利用宿主机内核调度资源,性能损失小
  • 方便的CPU和内存资源管理
  • 打包所有依赖,方便交付和分发

隔离性

  • 应用环境和宿主机完全隔离
  • 多个应用的版本可以并存在宿主机上

社区

  • docker命令简单,社区十分活跃,周边组件丰富

镜像增量分发

  • 每次传输只传输变化部分,节约带宽