拥有swoole标签的文章

【swoft.1.04】swoft中的熔断器

在应用架构中,熔断器起着同样的作用。在上一篇中说到了分布式应用架构做RPC远程调用可能遇到的问题,也就时服务在挂掉后程序互相阻塞导致整个系统雪崩。使用熔断器可以很好的解决这个问题。熔断技术可以说是一种“智能化的容错”,当调用满足失败次数,失败比例就会触发熔断器打开,有程序自动切断当前的RPC调用,来防止错误进一步扩大。实现一个熔断器主要是考虑三种模式,关闭,打开,半开。
阅读全文

【swoft.1.04】使用swoft+consul做服务注册,服务发现

前景提要在上一篇大概说了一下如何使用sowft去请求集群的服务,并实现了下图的架构在我写完后突然发现,swoole中使用服务提供者可以直接在配置中注入。不过没关系,上一篇也可以当做源码分析嘛!上一篇:今天,我会通过swoft+consul实现上图架构的升级版,也就是通过consul来实现服务注册,服务发现。在学习之前,你可能需要先补充一下consul的基础知识:那么进入正题吧! consul可以做什么consul可以通过集群
阅读全文

【swoft.1.03】如何请求集群的服务

前言上一篇讲到了当拆分了项目中的服务到本地后如何配置一个最简单的RPC以及RPC源码的阅读。不过既然已经开始使用远程调用了,架构肯定会向服务集群的方向发展,也就是一个服务由多个服务器,客户端需要对这些服务器进行随机或有规则的访问。如果是http请求的话,可以使用nginx反向代理做负载均衡等方式,但是这里RPC使用的是TCP协议,并不经过nginx。 情景模拟假设现在要做一个直播相关项目,因为弹幕相关功能负载非常高,所以需要对弹幕相关功能进行了服务拆分,并为了高可用给弹幕
阅读全文

【swoft.1.02】Swoft中的RPC

RPC 什么是RPCRPC是微服务的基石之一,因为微服务本身的核心是将服务拆分后互相调用,调用方法一般有两种模型,一种是REST风格的API接口,另一种就是远程调用RPC了。RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。比如说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,就需要通过网络来表达调用
阅读全文

【swoft.1.01】微服务介绍

前言准备开一篇微服务相关的博客,使用docker+swoft来部署微服务架构。在前公司有推行过swoft做微服务架构,结果架构推进未半而中道入院,挺遗憾的,所以自己来搞搞吧。至于内容就边写边想边学吧。 环境docker+swoft2.0.7+swoole4.4.8swoft的Dockerfile直接pull官方的docker镜像即可`docker pull swoft`至于swoft的相关知识,swoole我使用的比较熟,swoft理解不够深就不先
阅读全文

【swoole.2.07】协程化mysql的连接池

前言在上一篇中介绍了在协程中并发处理耗时操作,如第三方api接口,mysql等。在最后提出了一个问题,因为协程mysql虽然是通过io阻塞时挂起执行权限减少了php的时间成本,但是碰到mysql响应时间较慢,并发较多的情况下会导致mysql连接数过大,这时候是将后台的负担全部压到了数据库上。我们研究swoole的目的是利用协程进行性能调优,更好的利用服务器的资源而不是单纯的将后台的压力转移。所以在使用协程化mysql的时候需要引入连接池来处理。先来看看错误示范,也就是将所有压力都转移到mysql
阅读全文

【swoole.2.06】协程并发执行耗时操作,延迟收包,协程开发需要注意的事项

前言有关协程基本的知识前面已经说过了,协程的中心思想其实就是在IO阻塞的时候保存栈信息并让出代码执行权,等IO操作有返回后根据保存的栈信息切换回协程完成操作。这里就来模拟一下开发中可能会遇到的协程并发调用第三方接口及我自己和朋友们曾经碰到过的问题。 协程并发执行耗时操作 情景现在有一个功能需要依托在有节假日信息的数据上,那么现在第一步就是爬节假日数据了。这种事情一般都会使用第三方接口,但是第三方接口网络请求会有一定的io阻塞导致变慢,那么完全就可以将这部分io阻塞挂起使用
阅读全文

【swoole.2.05】使用协程前需要了解的:Generator,Iterator,yield

之前应该有说过,协程是语言层面的多进程,其主要思想是遇到io阻塞的时候保存当前栈信息作为上下文,让出代码执行权限,等io有返回之后再回去执行协程未执行完的代码。看起来比较难理解,所以在了解协程之前,先带大家了解下yield,Generator和Iterator 名词解释 IteratorIterator是一个迭代器接口,写php的朋友们可能对这个词比较陌生,写java的朋友们一眼就认出来了,这就是java中用来遍历数组的最简单的包:java.util.Iterator。当然其他语言
阅读全文

【swoole.2.04】多进程示例:使用swoole实现多进程处理费时任务--弹性伸缩子程序

回顾上一篇解决了回复僵尸进程的问题,但是在现实环境中,昂贵的服务器不会允许我们一直起多个worker进行处理,这里来解决一下怎么弹性伸缩worker。这里以消息队列中的待消费消息为例,当然也可以以其他指标为例,如cpu利用率,内存利用率等。 代码```phpclass Job{ protected $masterPid; protected $workerNumber = 2; protected $maxWorkerNumber = 10;
阅读全文

【swoole.2.03】多进程示例:使用swoole实现多进程处理费时任务--处理未回收的僵尸子进程

回顾上一篇实现了一个简单的多进程结构,但是当主进程退出时子进程并不会回收,会变成僵尸进程常驻在系统中浪费系统资源。那么现在来解决这个问题 代码```phpclass Job{ protected $masterPid; protected $workerNumber = 4; protected $queueKey = 1; protected $queueMod = 2 | \Swoole\Process::IPC_NOWAI
阅读全文