微服务技术选型之路

本文以笔者我的经历讲述关于微服务方面的技术选型和相关知识点。微服务模式的项目从初建到上线部署应用,每个环节都会涉及到至关多的技术细节(上线后的性能调优更须要)。本文着重介绍一套微服务搭建流程中面临的一些技术选型,战略性的技术方案及相关技术的简要介绍,不作每一项技术的深刻说明。java

 微服务简介

微服务是指开发一个单个小型的但有业务功能的服务,每一个服务都有本身的处理和轻量通信机制,能够部署在单个或多个服务器上。微服务也指一种种松耦合的、有必定的有界上下文的面向服务架构。sql

微服务是系统架构上的一种设计风格,主旨是将一个本来独立的系统拆分红多个小型服务,这些小型服务都在各自独立的进程中运行,服务之间经过基于HTTP/HTTPS协议的RESTful API进行通讯协做,也能够经过RPC协议进行通讯协做。被拆分红的每个小型服务都围绕着系统中一些耦合度较高的业务功能进行构建,而且每一个服务都维护着自身的数据存储,业务开发,自动化测试案例以及独立部署机制。因为有了轻量级的通讯协做基础,因此这些微服务可使用不一样的语言来编写。数据库

微服务的优势

  • 每一个微服务都很小,这样可以聚焦一个指定的业务功能或业务需求。
  • 微服务可以被小团队单独开发,这个小团队是2到5人的开发人员组成。
  • 微服务是松耦合的,是有功能意义的服务,不管是在开发阶段或部署阶段都是独立的。
  • 微服务能使用不一样的语言开发,如Java、Python、PHP、C#等。
  • 微服务容许容易且灵活的方式集成自动部署,经过持续集成工具,如Jenkins, Travis CI等工具。
  • 一个团队的新成员可以更快投入生产。
  • 微服务易于被一个开发人员理解,修改和维护,这样小团队可以更关注本身的工做成果。无需经过合做才能体现价值。
  • 微服务方便融合最新技术。
  • 微服务只是业务逻辑的代码,不会和HTML,CSS 或其余界面组件混合。
  • 微服务可以即时被要求扩展。
  • 微服务能部署中低端配置的服务器上。
  • 易于和第三方应用系统集成。
  • 每一个微服务都有本身的存储能力,能够有本身的数据库,也能够有统一数据库。

 微服务技术选型

前几年较为火的微服务技术有阿里的Dubbo方案。后面又出现了Spring体系下的微服务方案。本文主要介绍Spring体系下的微服务技术选型方案。编程

构建一套微服务最基本的是须要搭建网关,注册中心,开发具体实现业务功能的服务。对于各个微服务之间的通讯,可经过Feign方案处理。具体搭建一套微服务技术选型可参考以下方案:api

不一样的技术选择应用的场景不一样:安全

  • 网关:若整个公司业务都基于java开发,能够直接使用Spring Gateway作网关。若还存在其余的开发语言,也可选择kong网关模式。
  • 注册中心:基于java开发,Spring体系下可直接用 Spring Eureka。若还存在其余语言编写的服务,可以使用Consul。
  • 微服务搭建:各自语言均可以搭建。若采用java开发,可参考Spring boot方案搭建微服务。
  • 持续集成的方案,三种均可以。若基于java开发,第一种最为传统,运维人员或开发人员工做更多,需编写启动脚本,使用jdk命令启动java程序。建议使用第二种方案。第三种方案操做更为简便,但需用阿里云的产品。
  • Spring Boot 项目构建:采用Spring Boot模式搭建微服务项目时,对于Maven项目pom.xml配置文件的使用需注意pom文件配置单项目模式和项目聚合模式的区别。对于网关,注册中心可采用单项目模式。但在搭建真正业务的服务时,建议采用父子级项目聚合的方式。笔者最初作微服务开发时,采用了单项目的模式,当开发了多个业务的微服务后,单项目模式在引用依赖项目版本,管理项目时极为不便。

微服务相关知识点

本文针对Spring体系下微服务经常使用的几个知识点作简要说明,具体细节,原理,如何应用可经过关键词搜索详细了解。服务器

Spring Boot

Spring Boot是由 Pivotal团队提供的全新框架,其设计目的是用来简化新 Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员再也不须要定义样板化的配置。架构

Spring Boot的核心思想就是约定大于配置,一切自动完成。采用 Spring Boot能够大大的简化开发模式,经过组件的模式集成经常使用的框架。并发

Spring Cloud

Spring Cloud是一系列框架的有序集合。它利用 Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线线、负载均衠、断路器、数据监控等,均可以用 Spring Boot的开发风格作到一键启动和部署。 Spring并无重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组台起来,经过 Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系統开发工具包。负载均衡

微服务是能够独立部署、水平扩展、独立访问(或者有独立的数据库)的服务单元, Spring Cloud就是这些微服务的大管家,采用了微服务这种架构以后,项目的数量会很是多, Spring Cloud作为大管家就须要提供各类方案来维护整个生态。

Spring Cloud就是一套分布式服务治理的框架,既然它是一套服务治理的框架,那么它自己不会提供具体功能性的操做,更专一于服务之间的通信、熔断、监控等。所以就须要不少的组件来支持一套功能。

Spring Cloud的子项目,大体可分红两类,一类是对现有成熟框架”Spring Boot化”的封装和抽象,也是数量最多的项目;第二类是开发了一部分分布式系统的基础设施的实现,如Spring Cloud Stream扮演的就是kafka, ActiveMQ这样的角色。

 Spring Cloud Eureka

Spring Cloud Eureka是Spring Cloud Netflix项目下的服务治理模块。而Spring Cloud Netflix项目是Spring Cloud的子项目之一,主要内容是对Netflix公司一系列开源产品的包装,它为Spring Boot应用提供了自配置的Netflix OSS整合。经过一些简单的注解,开发者就能够快速的在应用中配置一下经常使用模块并构建庞大的分布式系统。它主要提供的模块包括:服务发现(Eureka),断路器(Hystrix),智能路由(Zuul),客户端负载均衡(Ribbon)等。

Spring Cloud Gateway

Spring Cloud Gateway是Spring官方基于Spring 5.0,Spring Boot 2.0和Project Reactor等技术开发的网关,Spring Cloud Gateway旨在为微服务架构提供一种简单而有效的统一的API路由管理方式。Spring Cloud Gateway做为Spring Cloud生态系中的网关,目标是替代Netflix ZUUL,其不只提供统一的路由方式,而且基于Filter链的方式提供了网关基本的功能,例如:安全,监控/埋点,和限流等。

Spring Cloud Feign

Feign是一个伪客户端,即它不作任何的请求处理。Feign经过处理注解生成request,从而实现简化HTTP API开发的目的,即开发人员可使用注解的方式定制request api模板,在发送http request请求以前,feign经过处理注解的方式替换掉request模板中的参数,这种实现方式显得更为直接、可理解。

Feign封装了Http调用流程,更适合面向接口化的编程习惯。在服务调用的场景中,咱们常常调用基于Http协议的服务,而咱们常用到的框架可能有HttpURLConnection、Apache HttpComponnets、OkHttp3 、Netty等等,这些框架在基于自身的专一点提供了自身特性。而从角色划分上来看,他们的职能是一致的提供Http调用服务。


本文的重点是你有没有收获与成长,其他的都不重要,但愿读者们能谨记这一点。同时我通过多年的收藏目前也算收集到了一套完整的学习资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、Jvm性能调优、Spring,MyBatis,Nginx源码分析,Redis,ActiveMQ、、Mycat、Netty、Kafka、Mysql、Zookeeper、Tomcat、Docker、Dubbo、Nginx等多个知识点高级进阶干货,但愿对想成为架构师的朋友有必定的参考和帮助

须要更详细架构师技能思惟导图和如下资料的能够加一下技术交流分享群:“708 701 457”免费获取




相关文章
相关标签/搜索