微服务设计
2020-01-07 13:55:46 0 举报
AI智能生成
登录查看完整内容
微服务设计基础,包括概念、架构、建模、原则等内容
作者其他创作
大纲/内容
集成
编排 / 协同
1、同步调用
2、异步请求加回调
3、协同方案
请求/响应方式
RPC 远程过程调用
REST 表述性状态转移
我们很容易把数据库表的存储的数据直接暴露给消费者。如何避免这个问题? 解决方案就是先设计外部接口,等到外部接口稳定之后再实现微服务内部的数据持久化
资源的有效性时限(啥时间段有效)
调用方缓存
版本号
https://semver.org/lang/zh-CN/
格式: MAJOR.MINOR.PATCH
MAJOR 改变表示其中包含向后不兼容的修改
MINOR 改变表示有新功能的增加,但是向后兼容的
PATCH 改变表示对已有功能的缺陷修复
建模
好服务标准
松耦合
高内聚
限界上下文
共享的隐藏模型
同一个名字在不同的上下文中有着完全不同的含义
模块和服务
过早划分
过早划分存在代价
业务功能
功能作为关键操作,而不是简单的CRUD
逐步划分上下文
关于业务概念的沟通
技术边界
洋葱架构
架构师
职责
确保团队有共同的技术愿景
确保系统适合开发人员在其上工作
代码架构师
系统架构师
概念
微服务就是一些协同工作的小而自治的服务
很小,专注做好一件事情
内聚性
把因相同原因而变化的东西聚合到一起,而把因不同原因而变化的东西分离开来
一个微服务可以在两周内重写
自治性
一个微服务就是一个独立的实体
微服务架构是SOA(面向服务的架构)的一种特定方法
面对所有分布式系统需要面对的复杂性
主要好处
技术异构性
弹性
扩展
简化部署
与组织结构相匹配
可组合性
对可替代性的优化
微服务设计
分解
接缝
接缝可以成为服务的边界
多寻找接缝处
数据库
数据库访问改API访问
数据库配置表改配置文件或者代码实现
表拆分
事务
补偿处理
达到最终一致性
补偿事务抵消
事务管理器
二阶段/三阶段提交
尽量事务处理融合在一起
避免技术角度思考,业务上区分
报表
数据库层面数据抽取
部署
CI 持续集成
工具 / 脚本
构建
构建物
Java: JAR包 / WAR包
Ruby:gem
Python:egg
Node.js:NPM包
一个服务 一个代码库 一个CI
CD 持续交付
流水线
编译及快速测试 - 耗时测试 - 用户验收测试(UAT) - 性能测试 - 生产环境
多套环境
一个用来运行耗时测试
一个用来做UAT
一个用来做性能测试
一个用于生产环境
我们需要创建一个构建物作为候选发布版本,并使其沿着流水线向前移动,最终确认它能够被发布到生产环境
Docker
CoreOS是一个专门为Docker设计的操作系统,是经过剪裁的Linux OS
自动化
原则
围绕业务概念建模
围绕业务的限界上下文定义的接口
接受自动化文化
CI/CD
环境定义
自定义镜像加快部署
自动化测试
隐藏内部实现细节
让一切都去中心化
可独立部署
隔离失败
舱壁
断路器
高度可观察
监控
日志跟踪 TraceId
级联关系 SpanId
以标准的格式将日志记录到一个标准的位置
0 条评论
回复 删除
下一页