PHP在微服务这块跟java与go还是有一定距离的,不管是社区氛围、第三方开源库都有些距离.

1. 四个基础的部分:

①. 注册与发现
②. 服务熔断
③. 服务限流
④. 配置中心

2. 服务注册与发现:

微服务中,有订单服务、商品服务、用户服务…,由于压力不同,数据量也不同,很可能是分开部署的.

(1). 为什么要服务注册?

①. 调用端不可能是写死服务1的ip地址.
②. 原因:
   一旦这台服务器发生了变化(网格不通、宕机、IP变化),就要同步更改调用端的代码.
③. 解决:
   可以将服务1、服务2、服务N注册到服务注册中心.

(2). 单机方案:

①. 在单机中,直接用一个mysql就可以做服务注册中心.
②. 把服务1、服务2的服务名称、ip及端口存放到mysql中就可以.然后调用端去mysql中找地址.
③. 没有必要使用专门的服务注册中心的.
④. 需要手工实现注册和发现两个过程:
   a. 手工代码实现,只要访问它的api直接注入进去,发现也是取它的api.
   b. 不同的服务器的服务都提供相同的功能,服务注册中心到底是取哪一个,需要负载均衡算法来完成.
   c. 如何某一台宕机后也要同步取消服务注册中心的地址?
   d. 如何检查服务是否健康?
   e. 上述都是由服务注册中心来完成的功能.

(3). 分布式架构方案:

①. 服务1与服务注册中心2是一台服务器,服务2与服务注册中心3是一台服务器...
②. 3台服务注册中心集合变成集群.
当服务2发布了,会把这个地址注册到服务注册中心3中.由于3台服务注册中心是建立集群的.所以,调用端去调用服务2时,是可以调用的.
③. 服务注册中心的强一致、数据的一致性非常重要.
④. 有一些专门存储服务注册的key-value软件.如:consul、etcd、java的Eureka.

(4). 网关结合服务注册中心:

①. 实际开发中,一般会配置一个网关(如:traefik).
②. 因为服务是部署在内网的,调用端是不允许直接调用服务端.通过网关的方式进行中转、转发.

3. swoft服务注册与发现:

微服务治理过程中,经常会涉及注册启动的服务到第三方集群.如consul/etcd等.Swoft框架中使用swoft-consul 组件来实现服务注册与发现.

3.1 服务注册:

无论是http/rpc/ws服务,启动时只需监听SwooleEvent::START事件,即可把启动的服务注册到第三方集群.

在这里当前服务是一个服务提供者,比如 用户服务、商品服务.

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐