字数
1285 字
阅读时间
6 分钟
什么是微服务
微服务是一种分布式系统解决方案,推动细粒度服务的使用,这些服务协同工作,且每个服务都有自己的生命周期。-- 《微服务设计》
微服务是松耦合的分布式软件服务,这些服务执行少量的定义明确的任务。-- 《Spring微服务实战》
微服务不是一个新理念,只是一个新名词。本次梳理聚焦于理念和思想,实现细节变化的速度总是比它们背后的理念要快得多。
没有银弹,选择了微服务,你需要面对所有分布式系统需要面对的复杂性。
特点
- 小的
- 自治
小型的、简单的和解耦的服务 = 可伸缩的、有弹性的和灵活的应用程序 服务越小,微服务架构的优点和缺点也就越明显。对于一个服务来说,应该考虑什么应该暴露,什么应该隐藏。
原则
- 围绕业务概念建模
- 接受自动化文化
- 隐藏内部实现细节
- 让一切都去中心化
- 可独立部署
- 隔离失败
- 高度可观察
12要素
- 一份基准代码,多份部署
- 显式声明依赖关系
- 在环境中存储配置
- 把后端服务当作附加资源
- 严格分离构建、发布和运行
- 以一个或多个无状态的进程运行应用
- 通过端口绑定提供服务
- 通过进程模型进行扩展
- 快速启动和优雅终止可最大化健壮性
- 开发环境与线上环境等价
- 把日志当作事件流
- 后台管理任务当作一次性进程运行
12factor官方页面:https://12factor.net/
如何建模(系统设计)
- 技术愿景
- 同理心、合作
- 界限上下文
- 共享的隐藏模型
分解
- 关键是界限
- 改变的速度
- 找到问题的关键
- 理解根本原因
任何能够简化工作的措施都值得尝试!
规模化
- 分布式计算的故障
- 故障无处不在(软件可能崩溃,硬盘终究会坏,故障一定会发生)
- 反脆弱的组织(事物实际上受益于失败和混乱)
- 分散风险(反亲和,BZ计划)
- 拥抱故障(试图阻止,快速恢复)
- 超时、断路器、舱壁、隔离
- 别忘了人
工程建设
- 安全
- 集成
- 测试
- 部署(发布)
- 交付
- 监控
- 拨测
人们常说,你不应该实现自己的加密算法库。那么,你是否应该实现自己的分布式协调系统?
微服务的最佳载体:容器。
反模式
- 从单体开始,不要一开始就微服务
- 做到平均三到五人(小型开发团队)一个微服务
- 领域边界,杂乱的依赖
- 微服务快吗?
- 系统本身不支持快速变化
- “上帝”服务,哑服务
康威定律
微服务架构可以很好的将架构与组织结构相匹配,比年出现过大的代码库,从而获得理想的团队大小及生产力。
从一个合适的点开始,架构师(类比测试左移,架构左移到开发,即全栈)承担了驱动系统演化的职责。
一些文章
- 为什么大公司一定要使用微服务?
- 为什么我们放弃了微服务
- 为什么在做微服务设计的时候需要DDD?
- 设计一个成功微服务的9个基本要素
- 导致你的微服务走向失败的11个原因
- 王者荣耀为什么不使用微服务架构?
- 杀死微服务
- Serverless:微服务架构的终极模式
- 微服务架构设计实践总结和思考
- 微服务架构与领域驱动设计应用实践从1到2000个微服务,史上最落地的实践云原生25个步骤