Skip to content
Go back

微服务

Edit page

微服务

先说说单体应用

过去的 Web 项目还不庞大的时候,软件的各个功能组件常常使用 All in One 的开发方式,即各个内部组件组装在一个单体应用内部,再将其部署到多台服务器上,再由代理服务器接受外来请求,然后通过负载均衡技术,将大量的请求分摊到每台服务器上,来增强应用的健壮性和可用性。

但这种 All in One 的架构在软件体量日渐庞大的今天,开发效率和单体应用的健壮性都会受到挑战。于是微服务架构就被提出了。

再说说微服务

微服务架构将软件的各个功能组件拆分开来,包装成相对独立的微服务,部署到不同的机器上,组件之间使用 http/https 等轻量可拓展的协议进行通信,来形成一个软件整体。这样的架构使得各个功能组件能够解耦,减少开发的错误,增强软件的健壮性。

目前常用的微服务框架有 DubboSpring CloudSpring BootDropwizardAkkaVert.x/Lagom/ReactiveX/Spring 5 等。以上都是 Java 阵营的微服务框架;

.NET 阵营有 .NET CoreService FabricSurgingMicrodot Framework 等;

Node.js 阵营有 SenecaHapi/Restify/LoopBack 等;

Go 阵营有 Go-Kit/Goa/Dubbogo 等;

Python 阵营有 Nameko

SpringCloud

构建分布式系统不需要复杂和容易出错。Spring Cloud 为最常见的分布式系统模式提供了一种简单且易于接受的编程模型,帮助开发人员构建有弹性的可靠的协调的应用程序。Spring Cloud 构建于 Spring Boot 之上,使得开发者很容易入手并快速应用于生产中。

简而言之,Spring Cloud 就是一套简易的编程模型,帮助我们在 Spring Boot 之上建立微服务应用。而我们在建立微服务应用时需要做的工作如 服务发现注册、配置中心 、消息总线 、负载均衡 、断路器 、数据监控 等,在 Spring Cloud 中都有相应的编程模型。

picture 2

Spring Cloud 的版本号均为英国伦敦地铁站的站名,根据字母表的顺序来对应版本时间顺序,比如:最早 的 Release 版本 Angel,第二个 Release 版本 Brixton (英国地名),然后是 CamdenDalstonEdgwareFinchleyGreenwichHoxton

下面从 Spring Cloud 的各个组件的介绍来了解 Spring Cloud 如何完成微服务的各项工作的,主要包括:

Eureka 服务发现框架 Ribbon 进程内负载均衡器 Open Feign 服务调用映射 Hystrix 服务降级熔断器 Zuul 微服务网关 Config 微服务统一配置中心 Bus 消息总线

服务发现框架( Eureka )

Eureka 是基于 REST (代表性状态转移)的服务,主要在 AWS 云中用于定位服务,以实现负载均衡和中间层服务器的故障转移。我们称此服务为 Eureka 服务器。 Eureka 还带有一个基于 Java 的客户端组件 Eureka Client ,它使与服务的交互变得更加容易。客户端还具有一个内置的负载平衡器,可以执行基本的循环负载平衡。在 Netflix ,更复杂的负载均衡器将 Eureka 包装起来,以基于流量,资源使用,错误条件等多种因素提供加权负载均衡,以提供出色的弹性。

从上面关于微服务的概述中可以看出,微服务其实就是把一个单体应用中的每个模块拆出来,单独部署到服务器上,由调用者调用。到这里我们有了两个概念:

由于服务提供者和服务消费者都是散装的,如果提供者通过广播的方式让消费者发现自己,提供者需要耗费大量网络资源进行广播,而且网络上不是每个服务器都是消费者,所以存在资源浪费。这时,就需要一个中介,让提供者把自己的注册到上面,消费者只需要访问中介来寻找自己需要的服务;

picture 3

带有服务发现功能的组件有许多,诸如: ZookeeperConsul 等;

更多的 Eureka 功能,待总结;

深入理解 Eureka ——SnailClimb

负载均衡器( Ribbon )

Edit page
Share this post on:

Previous Post
软件工程书单
Next Post
正则表达式