我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

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

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

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

下载Word文档

猜你喜欢

SpringCloud微服务基础知识点

这篇文章将为大家详细讲解有关SpringCloud微服务基础知识点,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、什么是Spring Cloud?SpringCloud 对常见的分布式系统模式提供了简单
2023-06-15

go-micro微服务JWT跨域认证问题

JWT以JSON对象的形式安全传递信息。因为存在数字签名,因此所传递的信息是安全的,这篇文章主要介绍了go-micro微服务JWT跨域认证,需要的朋友可以参考下
2023-01-16

SpringCloud微服务之Config知识点有哪些

这篇文章主要介绍了SpringCloud微服务之Config知识点有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、什么是Spring Cloud Config?Spr
2023-06-15

微云服务器

微云服务器是一种云服务器(cloudserver),它允许用户将数据存储在其服务器上,并与其他人共享。微云服务器与传统的本地云服务器(如AWS和GoogleCloud)不同,它们具有更高的可用性和可靠性。微云服务器的优势包括:更高的数据安全性:微云服务器可以通过加密、防火墙和其他措施来保护数据,以确保其安全性和可靠性。更高的可扩展性:与本地云服务器相比,微云服务器更容易扩展,以满足更多的需求。更低
2023-10-25

基于JWT规范实现的认证微服务

本文由公众号EAWorld翻译发表,转载需注明出处。作者:Marcelo Fonseca译者:白小白 原题:Building an authentication micro-service with JWT standard原文:http:
2023-06-05

微软云服务器免费一年

微软云服务器是微软公司开发的服务器软件产品,可以为用户提供高性能、高可靠性、高安全性以及高扩展性等方面的服务。免费使用微软云服务器可能需要您注册微软账号并支付一定的使用费。如果您想要免费使用微软云服务器,可以按照以下步骤操作:登录微软云服务器的官方网站,注册账户并购买虚拟主机。使用微软云服务器的远程管理工具,如MicrosoftAzureControllers等远程控制软件进行设置和管理
2023-10-26

云服务器部署微服务

云服务器部署微服务需要考虑很多方面,以下是一些需要考虑的方面:数据中心位置云服务器应该部署在公共云计算平台或本地数据中心上,并且需要支持多种不同的云计算平台。您需要考虑将数据备份到云服务器的位置,并且需要考虑将数据同步到云服务器的数据中心。云服务提供商对于需要使用云计算服务的微服务开发人员来说,选择一个可靠的云服务提供商非常重要。这包括选择云服务提供商的可靠性、安全性、性能等方面
2023-10-26

微服务架构—服务降级

1 、简介什么是服务降级?当服务器压力剧增的情况下,根据实际业务情况及流量,对一些服务和页面有策略的不处理或换种简单的方式处理,从而释放服务器资源以保证核心交易正常运作或高效运作。如果还是不理解,那么可以举个例子:假如目前有很多人想要给我付
2023-06-05

分解微服务:PHP 微服务架构的奥秘揭开

微服务在 PHP 中分解的奥秘
分解微服务:PHP 微服务架构的奥秘揭开
2024-02-16

微软云服务器

微软云服务器是微软公司为客户提供的云计算服务。它是一种基于互联网的服务,使用者可以通过浏览器访问其服务器,并使用由微软公司提供的各种云计算技术和服务。微软云服务器提供了丰富的功能,包括虚拟化、数据存储、负载均衡、安全保障等,可以帮助企业实现快速、低成本的IT基础架构部署。此外,微软云服务器还提供了一系列的优惠和支持措施,如数据备份、安全性保障等,可以满足企业在云计算领域的各种需求,提高企业竞争力。
2023-10-26

微软云服务器一年多少钱

微软云服务器的价格会受到多种因素的影响,如市场需求、供应商、技术和服务水平等等。为了更好地回答这个问题,我们需要了解一下微软云服务器当前的市场价格。目前,微软云服务器市场的价格主要由微软云服务器的品牌、型号和数量决定。品牌和型号不同,价格也会有所差异。例如,亚马逊AWS的云服务器价格可能较低,因为它提供的服务更多,比如弹性计算、容错处理和云基础设施管理等。另外,微软云服务器的供应商之间也存在
2023-10-26

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录