微服务学习笔记之理论篇

微服务学习笔记之一

  • reading notes of the micro service article by Martin Fowler, and some wiki explanation

多年以来, 开发者们受够了大而全的系统, 代码越积越多, 层次越做越深, 逻辑复杂, 结构混乱, 牵一发而动全身, 说好的高内聚, 松耦合几乎做不到.

相比大而全, 人们更喜欢小而美, 微服务 Microservice 就此应运而生.

简短来说, 微服务架构是一种以一些微服务来替代开发单个大而全应用的方法, 每一个小服务运行在自己的进程里,并以轻量级的机制来通信, 通常是 HTTP RESTful API. 微服务强调小快灵, 任何一个相对独立的功能服务不再是一个模块, 而是一个独立的服务.

举个例子, 就是将以前的大兵团全功能的部队, 拆分成一个一个专业化小分队, 各司其职, 各自为战, 彼此之间用清晰的接口通讯.

类似于真实世界, 以前推崇金字塔结构, 从上到下, 分层治理, 都在一个大的系统(进程)里以内部事件或函数调用的方法进行分工协作
现在呢, 更倾向于扁平化治理, 分成若干个独立运作的事业部(BU-Business Unit)或小组, 各自为战, 却又以API/RPC的方式紧密合作,为着一个或一些用户所需的产品服务

有一利就有一弊, 以往一个程序有几十个组件, 可能变成了有几十个micro service, 那么这么多micro service 如何管理呢?

类似于真实世界, 若干个小分队联合作战, 得有总参谋部协调, 彼此之间职责明确, 分工协作, 在软件世界中就有前端应用来具体调用和协调所依赖的微服务, 再加上服务注册service registery 和 服务发现 service discovery 功能

“Unfortunately, there is no silver bullet. ”
从来就没有包治百病的灵丹妙药, 如果有人声称有, 那一定是个骗子.
微服务的问题也不少, 小分队多了, 沟通成本就增加了, 性能也可能会有所下降

微服务架构的特征

Martin Fowler 在他的文章中总结了Micro Service的特点

  • 围绕业务功能进行组织 Organized around Business Capabilities
    • 不再是以前的纵向切分, 而改为按业务功能横向划分, 一个微服务最好由一个小团队针对一个业务单元来构建
  • 做产品而非做项目 Products not Projects
    • 不再是做一个个项目, 交付后就完事了, 而是做产品, 从设计编码到产品运维全过程掌控和负责 you build it, you run it
  • 智能终端加简单通道 Smart endpoints and dumb pipes
    • 基于resource的API,大量逻辑放在客户端, 服务器端着重于提供资源
      Be of the web, not behind the web
  • 去中心化管理 Decentralized Governance
    • 自行其是, 自我管理, 不必在局限在一个系统里, 围绕着一个中心
  • 去中心化数据管理 Decentralized Data Management
    • 各人自扫门前雪, 自己管理和维护自己的数据, 各自之间互不直接访问彼此的数据, 只通过 API 来存取数据
      msa_datastore
  • 基础设施自动化 Infrastructure Automation

    • 每个微服务应该关注于自己的业务功能实现, 基础设施应该尽量自动化, 构建自动化,测试自动化, 部署自动化, 监控自动化
      MSA_deploy
    • Build pipeline
      build_pipeline
  • 为应对失败而设计 Design for failure

    • 设计之初就要考虑高可靠性High Availablity 和灾难恢复 Disaster Recover, 并考虑在错误监测和错误诊断方面如何着手
  • 演进式设计 Evolutionary Design
    • 没有完美的架构, 唯一不变的是变化, 要善于应对变化,容易改变其设计和实现, 因为其小,故而易变

MSA Properties

  • The services are easy to replace 易替换
  • Services are organized around capabilities, e.g., user interface front-end, recommendation, logistics, billing, etc. 按功能单元组织
  • Services can be implemented using different programming languages, databases, hardware and software environment, depending on what fits best 微服务可选择最适合自己的技术方案
  • Architectures are symmetrical rather than hierarchical (producer - consumer) 架构由层次化转向扁平化

MSA Style

  • The services are small - fine-grained to perform a single function. 小而专精
  • The organization culture should embrace automation of deployment and testing. 自动化部署和测试
  • This eases the burden on management and operations. 减少operation的负担
  • The culture and design principles should embrace failure and faults, similar to anti-fragile systems.
  • Each service is elastic, resilient, compostable, minimal, and complete.

MSA relative patterns

  • MSA_relative_patterns

微服务技术选型

以Java语言实现的话,可以使用如下框架和库

  • 前端框架: AngularJS or React
  • 后端框架: Sprint MVC + MyBatis/Hibernate
  • 数据存储: MySql/Cassandra/Redis
  • 通信协议: Restful (HTTP + JSON)
  • 部署平台: Linux + Nginx + Tomcat
  • 测试工具: Junit/TestNG, Selenium, Jmeter
  • 安全性: oAuth (Spring Security)
  • 可靠性: Load balance + Reverse Proxy (Nginx) + Multi instances

比较完整的框架有

Reference

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值