微服务一站式开发

作者:黄朝兵
本科毕业于南京工业大学,目前在南京大学软件学院读软件工程硕士;工作10年左右,现就职于某家跨国公司担任资深开发工程师,主要从事微服务相关设计、开发工作;曾在日企从事过医疗软件核心系统开发工作;在国企完成电力调度、操作票核心系统开发与维护;在互联网公司职位为高级工程师,从事金融系统研发,主要职责是完成交易系统的核心功能的架构设计、开发。

单体架构(Monolithic)

十年前左右,我去公司面试时,面试官问我的第一个问题是让我简要介绍下软件设计中的三层设计模型(表示层、业务逻辑处理层、数据访问层):

  • 表示层:通常理解为用于和用户交互的视图层;
  • 业务逻辑处理层:用户提交请求,经过业务逻辑层处理后,对用户请求作出响应;
  • 数据库访问层:主要用于操作数据库。

尽管在软件设计过程中,架构师或者程序设计者遵守了流行一时的经典的三层模型,但由于并未按照业务场景进行划分,使得最终的系统应用将所有的业务场景的表示层、业务逻辑处理层、数据访问层放在一个 Project 中,然后经过编译、打包并部署到一台服务器上。

这种架构适用于用户业务不复杂、访问量较小的时候,甚至可以将应用服务、数据库、文件服务器部署在一台服务器上。但随着用户业务场景变得越来越复杂,单体架构的局限性就很快暴露出来了,主要体现在如下几方面:

  • 随着业务越来越复杂,单体应用代码量急剧膨胀,最终导致代码可 读性、可维护行和可扩展性得不到保证;
  • 随着用户访问量增加,单体应用的并发能力有限;
  • 随着系统代码量的剧增,当修改应用程序或者新增需求时,测试难度成指数级增长;
  • 部署效率低下;
  • 技术选型单一。

SOA 架构(Service Oriented Architecture)

SOA 是一种粗粒度、松耦合服务架构,服务之间通过简单、精确定义接口进行通讯,不涉及底层编程接口和通讯模型。SOA 可以看作是 B/S 模型、XML(标准通用标记语言的子集)/Web Service 技术之后的自然延伸。

其主要优点有:

  • 把模块(即服务)拆分,使用接口通信,降低模块之间的耦合度;
  • 把项目拆分成若干个子项目,不同的团队负责不同的子项目;
  • 增加功能时只需要再增加一个子项目,调用其它系统的接口就可以;
    可以灵活的进行分布式部署。

主要缺点:

和单体架构相比,增加了系统复杂度,系统整体性能有较大影响;
多服务数据通信协议之间转换过程复杂,容易造成 ESB(Enterprise Service Bus)性能瓶颈。

微服务架构(MicroServices)

微服务的概念是 Martin Flower 在2014年写的一篇论文《MicroServices》中提出来的,其主要特点是:

  • 每个服务按照业务划分;
  • 服务之间通过轻量级 API 调用;
  • 可以使用不同语言开发;
  • 可以使用不同的数据存储技术;
  • 可独立部署,服务之间互相不影响;
  • 可针对用户访问流量大的服务单独扩展,从而能够节约资源;
    管理自动化。

主要挑战:

  • 微服务粒度大小难以划分,需要设计人员对业务有很好的掌握;
  • 分布式复杂性,主要体现在分布式事务、网络延迟、系统容错等问题解决难度较大;
  • 微服务之间通信成本较高,对微服务之间网络稳定性、通信速度要求较高;
  • 由于微服务数量较大,运维人员运维、部署有较大的挑战。

通过以上对微服务的分析,相信各位读者已了解了微服务开发过程中我们将会面临的各种挑战。为了让大家在微服务开发过程中更加顺利,少踩坑,我在本达人课中分享了自己在微服务开发过程中的所有总结,希望对各位读者有所帮助。

众所周知,对于做技术的工程师而言,除了理论之外,我们更关注于实战,因此在课程的每篇文章中,主要以实战为主,比较关键的理论将同步为各位做详细说明。

为了方便大家更清晰地学习本课程,我们来看下课程目录安排。

  • 第01-02课:主要演示微服务开发过程中,Spring、Spring MVC 常用主要知识点;
  • 第03-05课:主要演示在实际工作中,Spring Boot 如何整合诸如 Spring Data JPA、Redis、MongoDB、RabbitMQ、Elasticsearch 此类的常用技术;
  • 第06-09课:将对 Consul 相关知识做详解,并利用 Spring Cloud 和 Consul 实现服务的注册与发现;同时将演示 Spring Cloud常用组件(如 Zuul、Ribbon、Hystrix、Feign 等)在实际工作中使用方法;此外,在网关层整合 OAuth 2 实现微服务鉴权、配置中心及请求链路跟踪等内容也会在本部分进行详细解读与演示;
  • 第10-13课:首先会对 Redis 分片原理、集群搭建、分片数据迁移,Redis 与 Lua 脚本整合进行详解;接着,对 ZooKeeper 相关算法(如 Paxos、ZAB)进行介绍,并对其 watcher 的实现原理及 ZooKeeper 集群搭建过程作分析与说明;之后讲解如何利用 Redis、DB、ZooKeeper 等实现分布式锁,介绍分布式事务相关原理,并演示在工作中如何利用消息中间件实现数据最终一致性和利用第三方组件实现数据实时一致性等内容;
  • 第14课:主要演示如何实现微服务监控;
  • 第15-17课:介绍 Docker 架构及常用命令;对常用容器管理平台如 Rancher、K8S 进行详细说明,并说明工作中如何用其管理容器;
  • 第18课:实战部分,对前17课所讲内容进行综合实战,让读者了解在工作中如何应用以上技术。其中主要包括微服务开发、微服务网关、微服务调用、负载均衡、熔断、微服务鉴权、日志监控、配置中心、微服务镜像生成、容器管理平台搭建及如何管理容器等技术内容。

本系列内容结合我当前自身的微服务的设计、开发工作,为有志于从传统开发模式向当前比较流行的微服务架构模式转变的开发者,提供比较完整的知识梳理及全技术栈障碍的打通。

其中的技术栈主要包括 Spring、SpringMVC 常用注解以及请求流程的梳理,Spring Boot 工作中常用基础知识以及主要会涉及到的各种技术框架的整合,Spring Cloud 的各个组件设计原理梳理以及如何使用,Docker 架构介绍以及容器化管理平台等。

专家推荐

  • 本课程全面介绍了基于 Spring Cloud 体系开发微服务的全过程,不仅包含基础的服务开发,而且深入地介绍了完整的微服务架构需要的服务治理、分布式事务等核心要素,课程还介绍了容器化部署微服务,微服务能够通过 DevOps 支持快速上线运营。
    ——润和软件研发总监,吴昊

  • 随着技术的发展,Spring Boot 以其高效的开发越来越受广大开发者喜爱,本课程从基础到实践全方位解读了 Spring Boot,很值得学习。
    ——中国石油规划总院高级开发工程师,李熠

  • 技术理论知识往往是枯燥、理想化的,如果没有实践和运用,终将停留在纸面上。黄朝兵通过实践和运用实例生动阐述了技术理论知识,使技术人员易懂会用。
    ——江苏润和软件股份有限公司资深 PMO,陈伟荣

扫码继续阅读或点此继续阅读

猜你喜欢

转载自blog.csdn.net/gitchat/article/details/81201467