iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >Hyperf微服务——一、认识微服务
  • 933
分享到

Hyperf微服务——一、认识微服务

微服务phpHyperf 2023-09-10 15:09:27 933人浏览 安东尼
摘要

Hyperf微服务——一、认识微服务 一、Hyperf是什么?传统FPM进程同步阻塞框架Hyperf协程异步非阻塞框架 二、为什么用微服务微服务的优点微服务的缺点HTTP和RPC

Hyperf微服务——一、认识微服务

一、Hyperf是什么?

以下内容摘自Hyperf官方文档
Hyperf 是一个高性能、高灵活性的渐进式 PHP 协程框架
Hyperspeed + Flexibility = Hyperf,从名字上我们就将 超高速灵活性 作为 Hyperf 的基因。
对于超高速,我们基于 Swoole 协程并在框架设计上进行大量的优化以确保超高性能的输出。
对于灵活性,我们基于 Hyperf 强大的依赖注入组件,组件均基于 PSR 标准 的契约和由 Hyperf 定义的契约实现,达到框架内的绝大部分的组件或类都是可替换的。
基于以上的特点,Hyperf 将存在丰富的可能性,如实现 WEB 服务,网关服务,分布式中间件,微服务架构,游戏服务器物联网ioT)等。

传统FPM进程同步阻塞框架

传统框架的并发受限于php-fpm进程数量。
从理论的角度上说php-fpm进程数越多越好。但是。。。。现实上 php-fpm的进程数会受到你的内存大小的限制。

一般情况下我们 进程数 =用机器内存(M)除以2 再除以20(M);例如8G内存可以有204个进程数。

如果是独立的php服务器还好,如果服务器上还有其他消耗内存的程序如Mysql等。那可以分配给php的内存就更少。而且每一个进程都是同步阻塞调用。还有一些mysql的长连接占用进程。所以这也限制了传统框架的并发吞吐量。

Hyperf协程异步非阻塞框架

协程是一种轻量级的线程,由用户代码来调度和管理,而不是由操作系统内核来进行调度,也就是在用户态进行。
swoole实现的协程是一种IO多路复用的模式。通过worker进程的协程调度器来调用进程内的协程资源,当协程遇到IO等待就自动切换协程,然后通过轮询的方式反复处理协程切换和执行。

worker进程内是以单线程的形式运行协程,同一时刻只有一个协程在运行。Redis的单线程模式基本一致。通常worker进程数与cpu核心数一致或2倍。进程内携程数默认100000。

所以如果协程内代码出现阻塞,则协程调度器无法进行协程切换,并发量会退化到进程数。官方提供了很多协程客户端,如mysql,redis等。但是mongoDB目前还没有协程客户端,所以如果使用monGodb查询会降低并发。
另外传统的php框架一个进程只有一个请求,而hyperf协程框架一个进程有多个协程,协程间的通信是通过上下文 context实现的,不能使用全局变量,否则数据会乱。微服务间的一些共享参数,比如用户信息,token等可以通过上下文传输。

二、为什么用微服务

微服务就是一些协同工作的,小而自治的服务

微服务的优点

  • 业务解耦
    随着需求迭代的增加,业务场景越发复杂臃肿。对单个模块或设计多个模块的功能开发难度也逐步提升,效率逐渐下降。也会出现很多耦合的业务和代码。根据业务线场景进行服务拆分,一方面可以根据组织结构进行弹性变动;一方面可以独立业务场景,对业务线的梳理更清晰、需求迭代的效率增加、难度降低、影响面缩小。
  • 性能提升
    通过协程框架代替传统FPM框架极大提高系统吞吐量和接口并发。通过rpc调用的方式代替Http请求,可以降低传输数据大小,加快传输速率,减少请求时间。
  • 独立部署
    单个服务可以独立开发和部署,降级因为某个需求的迭代或改动引起一些列衍生问题的概率,并降低影响面。
  • 弹性重构
    通过服务独立的降级、限流、熔断等方式减少不必要的因为运维或开发问题引起的系统全面瘫痪。可针对不同服务的功能、作用、承载量等多个方面进行弹性设置。可以较少业务重构的困难,降低重构的影响面。让重构更容易。

微服务的缺点

  • 对运维的能力有一定要求,并且运维复杂程度要远高于单体应用
  • 可能会出现一系列单体应用不会出现的问题,如数据混乱、内存溢出、协程问题等等

HTTP和RPC

OSI网络七层模型第一层:应用层。定义了用于在网络中进行通信和传输数据的接口;第二层:表示层。定义不同的系统中数据的传输格式,编码和解码规范等;第三层:会话层。管理用户的会话,控制用户间逻辑连接的建立和中断;第四层:传输层。管理着网络中的端到端的数据传输;第五层:网络层。定义网络设备间如何传输数据;第六层:链路层。将上面的网络层的数据包封装成数据帧,便于物理层传输;第七层:物理层。这一层主要就是传输这些二进制数据。

HTTP
基于HTTP协议,在应用层,包含了大量头信息,在接口调用中,大量信息没有利用价值,对信息的可读性要求也不高,建立连接需要三次握手,四次挥手,浪费时间。因为服务前引入了网关增加了可读性,所以服务间调用尽量精简、快速。
RPC
远程过程调用,基于tcp传输层,安全性高。减少了不必要的层级包装和头信息,较少报文体积,牺牲了信息的可读性提升信息传输的效率。以本地调用的方式调用其他服务的方法。可以跨语言。

RPC调用过程: 1. 客户端以本地调用方式调用客户端存根。 2. 客户端存根将服务信息、调用方法、参数等组装打包成一个消息体并消息体序列化为二进制。 3. 客户端存根发送消息体给指定服务端。 4. 服务端存根接收到消息,并反序列化解包消息体。 5. 服务端存根根据解码信息调用服务端本地方法。 6. 服务端本地执行并返回给服务端存根。 7. 服务端存根序列化打包消息体为二进制。 8. 服务端将消息体发送给客户端。 9. 客户端存根接收消息体并反序列化解包。 10. 客户端得到结果。

三、服务治理

服务注册与发现

consul一个去中心化用于实现分布式系统的服务注册与发现配置。提供一下功能服务:

  • 服务健康与检查
  • 服务注册与发现
  • 自身监控
  • Key/Value 存储
  • 多数据中心
  • web管理界面
  • 集群

consul工作原理:
服务启动时,会向consul发送一个post请求,提供自己的IP和PORT。一般一个服务会创建两个以上节点。
consul接收到服务发送的请求,每隔固定时间向服务发送一个心跳检测的请求,检测服务是否健康可用。
如果服务的某一个节点不可用,当服务调用端的请求过来时,会通过选举的方式选出新的leader节点供服务端调用。

服务重试

因为网络的不稳定性,可能会出现不可控的非业务错误的不可调用。如果没有重试机制,会出现一直请求消耗服务器资源造成雪崩。
通过限制请求的重试次数和间歇时间,比如每个请求最多重试3次,间歇0.2s。
重试策略:

  • 最大尝试次数
  • 错误分类 通过错误类别判断是否可以重试
  • 回退 资源耗尽后执行备选方法
  • 睡眠
  • 超时
  • 熔断 重试失败会标记为熔断,不再进行重试
  • 预算 通过注解提前生成一个令牌桶,重试前要消耗令牌数量,没有则不能重试

服务熔断与降级

避免因为某个服务不可用导致整个系统雪崩的处理方案。
例如秒杀活动的高并发造成商品服务不可用,因为没有降级服务导致所有调用商品服务的服务全部不可用,甚至系统全面瘫痪。以弃车保帅的方式在遇到突发流程或高并发流量的场景下,保证系统大部分功能可用。
通过注解设置熔断超时时间和失败次数进行熔断,熔断后降级到fallback方法返回数据,不再请求响应服务。
为指定方法设置熔断策略,比如请求超时0.05s,请求失败计数3次,则启动熔断。直接返回降级方法的结果

服务限流

通过注解对指定方法增加限流策略,避免一些并发高的接口因为一些突发流量和高流量下不可用。通过限流策略抛弃一些流量来保证接口可用性。
常用的限流策略:

  • 计数器
    比较粗暴,一段时间内对请求次数进行计数,与阀值进行比较判断是否需要限流,到达时间临界点,计数器清零。 无法承受瞬间突发流程
  • 漏桶
    固定容量的漏桶,固定速率流出水滴,但是对进度进入水滴的流速没有限制,水满则溢,请求被丢弃。无法精确评估水滴流出的速度。无法承受大流量和突发流量
  • 令牌桶
    固定容量的桶,桶可以是空的也可以是装满令牌的。以固定速率填充令牌,到达容量后,多余令牌被丢弃。每个请求过来,匹配相应数量的令牌,没有令牌则丢弃。

调用链追踪

阿里云日志,请求通过Nginx访问到网关,网关为每一个请求创建一个唯一id,放入context上下文中,服务调用链全部带上日志id,通过id在阿里云日志可以查看完整的请求调用链,可以快速定位错误。

服务监控

通过一些可视化工具监控服务的内存、cpu、mysql、redis等指标性能。

自动化运维

关于运维方面可以了解学习k8s相关内容。

来源地址:https://blog.csdn.net/LuckyStar_D/article/details/125317201

--结束END--

本文标题: Hyperf微服务——一、认识微服务

本文链接: https://www.lsjlt.com/news/402410.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Hyperf微服务——一、认识微服务
    Hyperf微服务——一、认识微服务 一、Hyperf是什么?传统FPM进程同步阻塞框架Hyperf协程异步非阻塞框架 二、为什么用微服务微服务的优点微服务的缺点HTTP和RPC ...
    99+
    2023-09-10
    微服务 php Hyperf
  • PHP微服务 hyperf+nacos使用
    PHP微服务 hyperf+nacos使用 这里简单说下微服务,及架构方面东西 1:微服务对php +fpm 模式意义不是很大,原因就是php+fpm 天生支持模块拆分,热更新,如果只是性能上的考虑,...
    99+
    2023-09-04
    微服务 php nacos hyperf
  • Microservice/微服务「PHP」 - Hyperf 学习/实践
    应用场景 主要用于学习PHP RPC框架Hyperf,进行微服务的架构开发,实现高性能,高并发系统服务。 学习/操作 1.文档阅读 Swoole 框架 - 学习/实践_william_n的博客-CSDN博客Hyp...
    99+
    2023-09-06
    php 微服务 rpc
  • SpringCloud微服务基础知识点
    这篇文章将为大家详细讲解有关SpringCloud微服务基础知识点,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、什么是Spring Cloud?SpringCloud 对常见的分布式系统模式提供了简单...
    99+
    2023-06-15
  • SpringCloud微服务之Config知识总结
    目录一、什么是Spring Cloud Config?二、搭建GIT环境三、服务端示例四、客户端示例五、安全认证示例六、集群搭建示例一、什么是Spring Cloud Config?...
    99+
    2024-04-02
  • go-micro微服务JWT跨域认证问题
    目录一 JWT介绍二 JWT优缺点三 JWT使用1. 导包和数据定义2.生成JWT3.解析JWT4.完整代码四 最后一 JWT介绍 JWT 英文名是 Json Web Token ,...
    99+
    2023-01-16
    go-micro微服务 go-micro微服务JWT认证
  • SpringCloud微服务之Config知识点有哪些
    这篇文章主要介绍了SpringCloud微服务之Config知识点有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、什么是Spring Cloud Config?Spr...
    99+
    2023-06-15
  • 基于JWT规范实现的认证微服务
    本文由公众号EAWorld翻译发表,转载需注明出处。作者:Marcelo Fonseca译者:白小白 原题:Building an authentication micro-service with JWT standard原文:...
    99+
    2023-06-05
  • 【微服务】服务网关----Gateway
    服务网关----Gateway 1、前言 2、网关简介 3、Gateway简介 4、Gateway快速入门 4.1 基础版 4.2 增强版(引入nacos) ...
    99+
    2023-10-06
    微服务 gateway java 服务网关 网关限流
  • 第一章:Mybatis与微服务注册
    目录 一、SpringBoot整合MybatisPlus 创建自动生成代码子模块 创建商品服务子模块 二、SpringBoot整合Freeamarker 三、SpringBoot整合微服务&gateway&nginx 整合微服务之商品服务z...
    99+
    2023-09-14
    mybatis 微服务 java nginx gateway
  • 微云服务器
    微云服务器是一种云服务器(cloud server),它允许用户将数据存储在其服务器上,并与其他人共享。微云服务器与传统的本地云服务器(如AWS和Google Cloud)不同,它们具有更高的可用性和可靠性。微云服务器的优势包括:更高的数据...
    99+
    2023-10-25
    服务器
  • 【微服务】服务容错---Sentinel
    微服务集成Sentinel 1、前言 2、Sentinel 入门 2.1、什么是 Sentinel? 2.2、Sentinel 特征 3、微服务集成Sen...
    99+
    2023-09-04
    sentinel 微服务 java 分布式 服务容错
  • 微软云服务器免费一年
    微软云服务器是微软公司开发的服务器软件产品,可以为用户提供高性能、高可靠性、高安全性以及高扩展性等方面的服务。免费使用微软云服务器可能需要您注册微软账号并支付一定的使用费。 如果您想要免费使用微软云服务器,可以按照以下步骤操作: 登录微...
    99+
    2023-10-26
    微软 服务器
  • 云服务器部署微服务
    云服务器部署微服务需要考虑很多方面,以下是一些需要考虑的方面: 数据中心位置 云服务器应该部署在公共云计算平台或本地数据中心上,并且需要支持多种不同的云计算平台。您需要考虑将数据备份到云服务器的位置,并且需要考虑将数据同步到云服务器的...
    99+
    2023-10-26
    服务器
  • 微服务架构—服务降级
    1 、简介什么是服务降级当服务器压力剧增的情况下,根据实际业务情况及流量,对一些服务和页面有策略的不处理或换种简单的方式处理,从而释放服务器资源以保证核心交易正常运作或高效运作。如果还是不理解,那么可以举个例子:假如目前有很多人想要给我付钱...
    99+
    2023-06-05
  • 分解微服务:PHP 微服务架构的奥秘揭开
    微服务架构是一种软件开发方法,将应用程序分解成松散耦合、独立部署的小服务。PHP 作为一种流行的 Web 编程语言,非常适合构建微服务。本文将深入探讨 PHP 微服务架构,揭开其分解过程的奥秘。 理解微服务的概念 微服务本质上是小型、自主...
    99+
    2024-02-16
    微服务 PHP 架构 分解 设计
  • 微软云服务器一年多少钱
    微软云服务器的价格会受到多种因素的影响,如市场需求、供应商、技术和服务水平等等。为了更好地回答这个问题,我们需要了解一下微软云服务器当前的市场价格。 目前,微软云服务器市场的价格主要由微软云服务器的品牌、型号和数量决定。品牌和型号不同,价...
    99+
    2023-10-26
    微软 多少钱 服务器
  • 微软云服务器
    微软云服务器是微软公司为客户提供的云计算服务。它是一种基于互联网的服务,使用者可以通过浏览器访问其服务器,并使用由微软公司提供的各种云计算技术和服务。微软云服务器提供了丰富的功能,包括虚拟化、数据存储、负载均衡、安全保障等,可以帮助企业实现...
    99+
    2023-10-26
    微软 服务器
  • golang关闭微服务
    在现代软件开发中,微服务架构已经成为了最为流行的技术方案之一。不仅可以提高软件的可扩展性和可靠性,也可以提升开发者的效率。但是,当我们的微服务规模变得越来越大,关闭微服务也变得越来越困难。因此,在本文中,我们将讨论如何在Golang中正确关...
    99+
    2023-05-15
  • 【微服务】07-缓存
    文章目录 为不同的场景设计合适的缓存策略1. 缓存是什么2. 缓存的场景3. 缓存的策略4. 缓存位置5. 缓存实现的要点6. 注意问题7. 使用的组件8. 内存缓存和分布式缓存区别 总结 为不同的场景设计合适的缓存策...
    99+
    2023-08-30
    微服务 缓存 .netcore 后端 开发语言
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作