微服务之服务注册与发现原理

1. 前言

在传统的开发中,由于提供服务的地址是相对静态的,所以我们只需要找到对应服务的开发人员,然后了解到对应的服务接口地址就可以了。

而在微服务架构开发过程中,如果我们需要调用一个RESTFul风格的API接口,我们就需要知道对应的服务在网络的什么位置,也就是说需要知道服务方的IP和端口号。在微服务架构或分布式环境下,这个问题很难得到解决,所以服务注册与发现技术不可或缺,这也是程序员进阶之路必须要掌握的核心技术之一。

2. 架构演进

先来看一个问题,假如现在我们要做一个商城项目,作为架构师,应该怎样设计系统的架构?你心里肯定在想:这还不容易直接照搬淘宝的架构不就行了。但在现实的创业环境中一个项目可能是九死一生,如果一开始投入巨大的人力和财力,一旦项目失败损失就很大。

作为一位有经验的架构师需要结合公司财力、人力投入预算等现状,选择最适合眼下的架构才是王道。大型网站都是从小型网站发展而来,架构也是一样。

任何一个大型网站的架构都不是从一开始就一层不变的,而是随着用户量和数据量的不断增加不断迭代演进的结果。

在架构不断迭代演进的过程中我们会遇到很多问题,技术发展的本质就是不断发现问题再解决问题,解决问题又发现问题。

2.1 单体架构

在系统建立之初可能不会有特别多的用户,将所有的业务打成一个应用包放在tomcat容器中运行,与数据库共用一台服务器,这种架构一般称之为单体架构。

在初期这种架构的效率非常高,根据用户的反馈可以快速迭代上线。但是随着用户量增加,一台服务的内存和CPU吃紧,很容易造成瓶颈,新的问题来了怎么解决呢?

2.2 应用与数据分离

随着用户请求量增加,一台服务器的内存和CPU持续飙升,用户请求响应时间变慢。这时候可以考虑将应用与数据库拆开,各自使用一台服务器。

突然有一天扫地阿姨不小心碰了电线,其中一台服务器掉电了,用户所有的请求都报错,随之而来的是一系列投诉电话。

2.3 集群部署

单实例很容易造成单点问题,比如遇到服务器故障或者服务能力瓶颈,那怎么办?聪明的你肯定想到了,用集群呀。

集群部署是指将应用部署在多个服务器或者虚机上,用户通过服务均衡随机访问其中的一个实例,从而使多个实例的流量均衡,如果一个实例出现故障可以将其下线,其他实例不受影响仍然可以对外提供服务。

随着用户数量快速增加,老板决定增加投入扩大团队规模。开发团队壮大后效率并没有得到显著的提高,以前小团队可以一周迭代上线一次,现在至少需要两到三周时间。

业务逻辑越来越复杂,代码间耦合很严重,修改一行代码可能引入几个线上问题。架构师意识到需要进行架构重构。

2.4 微服务架构

当单体架构演进到一定阶段后开发测试的复杂性都会成本增加,团队规模的扩大也会使得各自工作耦合性更严重,牵一发而动全身就是这种场景。

单体架构遇到瓶颈了,微服务架构就横空出世了。微服务就是将之前的

猜你喜欢

转载自blog.csdn.net/my8688/article/details/131831600