您现在的位置是:首页 > 技术教程 正文

微服务架构综合实战 一文让你了解什么是微服务 使用PHP 搭建微服务框架 最全微服务架构讲解以及演示

admin 阅读: 2024-03-14
后台-插件-广告管理-内容页头部广告(手机)

本文将带你从基础的微服务架构设计、网络协议、注册中心、配置中心、网关层面 渐进式讲解其微服务。

目录

一、微服务架构设计方案

架构演进

微服务概念

 拆分

​​​​​​三个火枪手原则

AKF原则

二、微服务注册中心和配置中心

为什么要使用服务发现与注册

为什么要使用配置中心

官方下载地址

设置环境变量

Server配置

单机配置

集群配置

命令解析

ThinkPHP接入Consul

配置信息中心 

三、微服务API网关设计

为什么需要网关

API网关对比

Kong与Konga的关联

konga关键概念词

​​​​​​​下载镜像

​​​​​​​安装

​​​​​​​创建网络

​​​​​​​安装postgres,kong依赖于postgres

​​​​​​​初始化kong数据表信息

​​​​​​​启动kong

​​​​​​​初始化konga数据信息

​​​​​​​创建连接节点

​​​​​​​实现负载

创建Upstreams

​​​​​​​创建服务

​​​​​​​创建路由

​​​​​​​实现Basic Auth 与 JWT 认证

​​​​​​​添加Basic Auth插件

​​​​​​​添加用户信息

​​​​​​​添加JWT 插件

​​​​​​​添加JWT 认证信息

​​​​​​​实现Oauth2 认证

​​​​​​​添加Oauth2 插件

添加用户信息

​​​​​​​获取token

​​​​​​​API限流

​​​​​​​API黑白名单

​​​​​​​延伸

​​​​​​​jwt异常

​​​​​​​虚拟机环境 IP黑白名单失效

​​​​​​​服务恢复

四、结合swoole、swoft微服务化搭建

​​​​​​​网络基础

​​​​​​​OSI七层模型与TCP/IP模型

​​​​​​​ARP 地址解析协议

​​​​​​​经典的TCP三次握手与四次挥手

​​​​​​​抓包

​​​​​​​Swoft框架介绍

​​​​​​​协程

​​​​​​​下载框架代码

​​​​​​​RPC 服务

​​​​​​​使用swoft  实现RPC 服务

​​​​​​​前期准备工作

​​​​​​​修改配置文件

​​​​​​​启动RPC服务

​​​​​​​RPC客户端实现

五、整合API与Kong网关以及consul注册中心

​​​​​​​consul服务注册

​​​​​​​新增注册中心相关配置

​​​​​​​添加监听注册

​​​​​​​创建Consul控制器

​​​​​​​启动服务

​​​​​​​Swoft 服务发现

​​​​​​​新增注册新增相关配置

​​​​​​​RPC服务发现

​​​​​​​服务限流

​​​​​​​熔断与降级

​​​​​​​consul与kong网关结合

​​​​​​​加入dns_resolver 信息

添加对应的SERVER信息

​​​​​​​后记


一、微服务架构设计方案

架构演进

在将微服务之前  我们看看目前的架构

单体架构

按照模块划分,公用一个数据库


垂直拆分架构

按业务功能划分单独的子系统,公用一个数据库

将数据库进行分拆分离,如下图:

微服务概念

微服务   即微小的服务,较小且独立的功能

微服务最早由Martin Fowler(马丁·福勒)与James Lewis于2014年共同提出,微服务架构风格是一种使用一套小服务来开发单个应用的方式途径,每个服务运行在自己的进程中,并使用轻量级机制通信,通常是HTTP API,这些服务基于业务能力构建,并能够通过自动化部署机制来独立部署,这些服务使用不同的编程语言实现,以及不同数据存储技术,并保持最低限度的集中式管理。

 

 拆分

拆分的颗粒度没有标准答案,只能根据经验,实际,方法论等,合理的进行拆分。

粗颗粒度拆分

项目工期短且要求是微服务的架构

细颗粒度拆分

  1. 服务划分过细,服务间关系复杂
  2. 服务数量太多,团队效率急剧下降
  3. 没有自动化部署支撑,无法快速交付
  4. 没有服务治理,微服务达到一定数量,后台管理混乱

纵向拆分和横向拆分

纵向拆分:从业务纬度进行拆分。标准是按照业务的关联程度来决定,关系比较密切的业务适合拆分为一个微服务,而功能相对比较独立的业务适合单独拆分为一个微服务。

横向拆分:从公共且独立功能纬度拆分。标准是按照是否有公共的被多个其他服务调用,且依赖的资源独立不予其他业务耦合。

划分例子

  1. 第一种分为商品、帖子、新闻3个服务
  2. 第二种分为商品、订单、帖子、回帖、新闻、评论6个服务

如何选择呢?

如果你的团队只有9个人,那么分为3个是合理的,如果有18个人。那么6个服务是合理的。

为什么呢,这就是三个火枪手原则。

​​​​​​三个火枪手原则

三个火枪手原则就是一个微服务由三个人负责开发。一般来说,在进行微服务架构时,根据团队规模来划分微服务数量是合理的。

而为什么是3个人????

从系统规模来讲,3 个人负责开发一个系统,系统的复杂度刚好达到每个人都能全面理解整个系统,又能够进行分工的粒度;如果2个人开发一个系统,系统复杂度不够;如果4个人甚至更多人开发一个系统,系统复杂度又会无法让研发人员对系统的细节都了解很深。

从团队管理来说,3个人可以形成一个稳定的备份,即使1个人有事不在,2个人也可以支撑;如果2个人的话,少了一个人剩余的1个人压力就很大;如果是1个人就更惨了

从技术角度,3个人的技术小组能够形成有效的讨论,能快速达成一致意见;如果是2个人,可能会有意见无法统一问题;如果4个人或更多,就会出现有的成员不认真讨论,开会划水。

AKF原则

AKF 把系统扩展分为以下三个维度:

  1. X 轴:直接水平复制应用进程来扩展系统,将系统复制多份,即加机器得方式,大大提高系统的总体容量、解决单点问题等(A+A+A+A)
  2. Y 轴:将功能拆分出来扩展系统。微服务经常采用的按照业务逻辑拆分(B+C=A)
  3. Z 轴:基于用户信息扩展系统。 将数据做分片拆分

二、微服务注册中心和配置中心

为什么要使用服务发现与注册

微服务带来最大的好处就是把整个大项目分割成不同的服务,运行在不同服务器上,实现解耦和分布式处理。微服务虽然有很多好处,但是也会有不好的一方面。任何事物都会有两面性,在微服务里面进行运维会是一个很大的难题,如果有一天我们的服务数量非常的多,然后我们又不知道哪一个服务在什么机器上。可能会有人说这部分直接写在程序的配置里面就好了,当我们服务少的时候是可以这么做的,也允许这么做,但是在实际当中我们要尽量避免这么做,比如说我们某一个服务,地址换了,那么我们设计的相关代码就得修改重新部署;又或者说我们有一天上线一个新服务或者下线一个服务,这时候我们又得修改程序代码,这是非常不合理的做法。那么有没有什么可以解决这样的问题呢?这里就需要用到我们的服务注册和发现了。

结构对比

没有服务注册发现的结构

 上图 我们可以看到在没有服务注册发现的时候一个调用者需要维护多个服务的IP和端口,这是非常不友好的做法,当我们服务进行调整的时候就有可能导致服务调用失败,还有服务器更换服务器,上下新服务,都会受到影响。将来某一个服务节点出现问题,排查对应程序对运维人员来说都是一场很大的灾难,因为不知道哪一个节点出了问题,需要每一台服务器的去排查。

有服务注册发现的结构

 我们从上图可以发现,当我们有注册中心之后调用者不需要自己去维护所有服务的信息了,仅需要向注册中心请求获取服务,就可以拿到想要的服务信息。这样当我们的服务有所调整,或者上线下线服务,都要可以轻松操作,并且可以在注册中间检查到服务的健康情况,帮助运维人员快速定位到故障的服务器。

为什么要使用配置中心

不使用配置中心 

 使用配置中心

主流的配置中心

  1. Apollo是有协程开源的分布式配置中心
  2. Spring Cloud Config
  3. Consul

官方下载地址

https://developer.hashicorp.com/consul/downloads

  1. wget https://releases.hashicorp.com/consul/1.15.1/consul_1.15.1_linux_386.zip
  2. unzip consul_1.15.1_linux_386.zip

设置环境变量

如果不设置可以直接把consul执行文件移动到/usr/bin目录下

mv consul /usr/bin 

注:此步骤非必要

ok, 安装成功后,我们接下来进行一些配置来启用consul

Server配置

单机配置

  • 服务器1,IP 192.168.5.189
标签:
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

在线投稿:投稿 站长QQ:1888636

后台-插件-广告管理-内容页尾部广告(手机)
关注我们

扫一扫关注我们,了解最新精彩内容

搜索
排行榜