分布式架构可以降低程序错误给整体系统带来的风险,也可以通过不断扩张主机的数量以实现横向水平的性能扩展,因此我们需要分布式架构。

微服务架构及容器技术

微服务这个词近几年很火,微服务架构(Microservices Architecture,MSA)是分布式架构的一种,它的产生主要依赖以下方面的内容:

  • 领域驱动设计:分析并模型化复杂业务。
  • 敏捷方法论:快速发布,形成有效反馈。
  • 持续交付:更快、可靠、频繁地部署和交付。
  • 虚拟化和基础设施自动化:Docker等容器技术简化安装部署环境。
  • DevOps:开发、测试、运维整合。

MSA把小的服务开发成单一应用的形式,每个服务运行在单独的进程中并采用轻量级的机制通信(HTTP等)。这些服务围绕业务构建,自动化部署,可以使用不同的编程语言和存储技术,并保持最小化集中管理。

如何构建微服务

ZooKeeper、Dubbo、Jersey、SpringBoot、SpringColud等都可以实现微服务。我决定围绕SpringBoot、SpringCloud展开微服务架构学习。

SpringBoot微服务架构基础

SpringBoot简化企业级应用开发地复杂性,提供很多开箱即用的Starter,通过少量代码创建一个独立的、产品级Spring应用。

我学习的步骤如下:

  • SpringBoot引入Web创建RESTful API和单元测试
  • 使用Swagger2构建API文档
  • 统一处理异常
  • SpringData JPA
  • SpringSecurity和JWT
  • 事务管理
  • 集中式缓存Redis
  • 日志系统 本地日志和MongoDB
  • 消息服务RabbitMQ
  • 邮件系统

微服务架构设计原则

  • 拆分足够微:足够小即可,不要过小。小团队两周内开发完且能够维护。
  • 轻量级通信:服务跨进程或跨主机,服务间通信采用采用轻量级通信协议,同步的REST(HTTP:XML/JSON),异步的AMQP、MQTT、STOMP。
  • 领域驱动原则:基于领域驱动设计(Domain-Driven Design,DDD)开发一个微服务,一个服务反应某个业务的领域模型,理清领域边界逻辑和上下文边界。
  • 单一职责原则:高内聚,低耦合。密切相关的多个功能应尽量包含在同一个服务中以降低服务间的干扰;通过接口(API、事件)进行通信以降低对其它服务的依赖。
  • DevOps及两个披萨:开发人员具备用户界面、业务逻辑、持久化存储、独立运维的全栈能力,降低沟通成本,防止项目陷入停顿。人数不多过两个披萨不够吃。
  • 不限于技术栈:根据场景(计算密集型[CPU/内存]、非结构化存储[NoSQL])进行技术选型,但不滥用技术,以安全稳定的Java等为主。
  • 可独立部署:微服务独立部署使得开发者不再需要协调其它服务部署对本服务的影响;Docker容器技术使得服务能够在构建镜像中所期望的环境中运行。

参考

http://blog.didispace.com/spring-boot-learning-1x/

《SpringCloud微服务架构 杨伟卫著》第1章 微服务概述

(完)