
php微服务项目
项目实战
lixiyong1989
这个作者很懒,什么都没留下…
展开
-
13.微服务-分布式事务TCC型(二)
代码实现实现一个完整的业务活动由一个主业务服务与若干从业务服务组成主业务服务负责发起并完成整个业务活动从业务服务提供TCC型业务操作业务活动管理器控制业务活动的一致性,它登记业务活动中的操作, 并在业务活动提交时确认所有的TCC型操作的confirm操作,在业务活动取消时调用所有TCC型操作的cancel操作首先在rpc控制器中给业务服务加tcc标记,例如主服务调用orderSuc...原创 2020-03-21 23:13:31 · 796 阅读 · 1 评论 -
12.微服务-分布式事务TCC型(一)
柔性事务解决方案:TCC实现一个完整的业务活动由一个主业务服务与若干从业务服务组成主业务服务负责发起并完成整个业务活动从业务服务提供TCC型业务操作业务活动管理器控制业务活动的一致性,它登记业务活动中的操作, 并在业务活动提交时确认所有的TCC型操作的confirm操作,在业务活动取消时调用所有TCC型操作的cancel操作成本实现TCC操作的成本业务活动结束时confirm...原创 2020-03-21 21:07:46 · 974 阅读 · 0 评论 -
11.微服务-分布式事务最大努力通知型
最大努力通知型1、Rabbitmq实现延迟队列2、使用swoft自带服务组件3、将最大努力通知服务放入到swoft柔性事务解决方案:最大努力通知(定期校对)实现业务活动的主动方,在完成业务处理之后,向业务活动的被动方发送消息,被动方需主动响应正确消息,否则根据定时策略,最大努力通知。业务活动的被动方也可以向业务活动主动方查询,恢复丢失的业务消息。约束被动方的处理结果不影响主动方...原创 2020-03-21 12:17:35 · 1012 阅读 · 1 评论 -
10.微服务-分布式事务最终一致性(三)
消息恢复子系统对应的步骤看看代码实现流程,支付成功后,首先是pay网关收到支付成功的消息,调用rpc接口,预发送消息,更新订单状态,存储发送消息,发送消息到中间件,由中间件把消息传递给消费端的监听队列,最终增加用户的积分,更新订单状态和增加积分虽然不是同时进行,但是最终的结果是一致的,就是分布式事务的最终一致性先看看pay网关的order函数,预发送消息,然后通过rpc调用messge微服...原创 2020-03-20 16:46:38 · 391 阅读 · 0 评论 -
9.微服务-分布式事务最终一致性(二)
封装rabbitMQ的连接池消息子系统的构建1.构建消息服务子系统(包含接口)2.构建其他服务(骨架大搭建)3.简单的封装rabbitMQ的连接池4、消息发布确认5、消息存储的设计(任务数据存储)6、消息id的生成7、服务提供任务执行结果查询接口整体流程:现在在做红色框框的部分,代码体现消息子系统的构建1.构建消息服务子系统(包含接口)存储预发送消息(主动方应用系统)确认并发送消息(主动方...原创 2020-03-19 16:23:38 · 363 阅读 · 1 评论 -
8.微服务-安装rabbitmq
1.docker安装rabbitMQdocker run -d --hostname my-rabbit --name rabbit -15672:15672 -p 5672:5672 rabbitmq2.安装 rabbitmq-c,C 与 RabbitMQ 通信需要依赖 rabbitmq-c 库(librabbitmq),具体请看https://github.com/alanxz/ra...原创 2020-03-18 02:26:56 · 244 阅读 · 0 评论 -
7.微服务-分布式事务最终一致性(一)
微服务架构-最终一致性方案设计思路本节内容一、可靠消息最终一致(异步确保型)1、从主动方应用的角度2.从中间件的角度3.异常情况的总结处理三、常规消息队列的流程跟特点3.1、MQ队列消息的生产与消费常规流程3.2、AMQP协议的认识四、当前包含了消息管理子系统本节内容)1、如何做到消息一致,消息可靠投递2、消息中间件的使用,快速入门rabbitMQ3、设计消息子系统(重点)一、可靠消息...原创 2020-03-17 05:11:30 · 605 阅读 · 0 评论 -
6.微服务-项目大体架构
第三方支付平台一、支付平台服务化流程二、分布式事务问题的代码场景三、不同的事务的解决方案2.1可靠消息最终一致(异步确保型)2.2柔性事务解决方案:TCC(两阶段型、补偿型)2.3柔性事务解决方案:最大努力通知(定期校对)一、支付平台服务化流程二、分布式事务问题的代码场景当支付平台收到扣款结果的处理伪代码,我们可以看到如果是多个服务,位于不同主机,不同的网络当中,我们没有办法用本地事务保证...原创 2020-03-17 03:09:33 · 1330 阅读 · 0 评论 -
5.微服务-熔断降级组件
熔断组件封装熔断技术可以说是一种“智能化的容错”,当调用满足失败次数,失败比例就会触发熔断器打开,有程序自动切断当前的RPC调用,来防止错误进一步扩大。实现一个熔断器主要是考虑三种模式,关闭,打开,半开。<?php declare(strict_types=1);namespace App\Http\Controller;use App\Rpc\Lib\PayInterface...原创 2020-03-16 10:59:45 · 1204 阅读 · 0 评论 -
4.微服务-docker构建consul集群
consul组建consul集群创建dockerfile接下来使用此docker镜像 创建容器配置consul集群访问web-ui http://182.61.147.77:8501/ui/dc1/nodes最后用服务器的swoft开启一个http服务,用作consul-serverswoft向consul注册并且向consul查询健康服务从consul当中获取健康服务并且实现加权负载均衡...原创 2020-03-16 08:05:27 · 475 阅读 · 0 评论 -
3.微服务-RPC解析及封装
微服务架构-RPC组件封装一、RPC启动之前准备二、RPC启动之后的流程三、封装RPC组件一、RPC启动之前准备1.1、配置文件启动的时候,通过指定要启动的监听服务,使用多端口监听的方式启动rpc服务,并且会每个组件里的AutoLoader.php文件,调用加载beans方法所返回的信息,放入到bean容器当中其中src/AutoLoader.php 是每一个组件必须存在的文件,swoft...原创 2020-03-15 11:49:35 · 982 阅读 · 0 评论 -
2.微服务-模拟实现注解形式的路由收集
模拟实现注解形式的路由收集入口文件index.phpinit()方法最后通过swoole开启一个http服务入口文件index.php<?php$loader = require __DIR__ . "/vendor/autoload.php";Core\Application::init();$server=new Swoole\Http\Server('0.0.0.0'...原创 2020-03-15 08:22:14 · 182 阅读 · 0 评论 -
1.微服务-swoft入门
Swoft介绍1.swoft生命周期①.首先会调用相关处理器做相关的初始化工作②.注解信息扫描收集2.框架快速入门首个基于 Swoole 原生协程的新时代 PHP 高性能协程全栈框架,内置协程网络服务器及常用的协程客户端,常驻内存,不依赖传统的 PHP-FPM,全异步非阻塞 IO 实现,以类似于同步客户端的写法实现异步客户端的使用,没有复杂的异步回调,没有繁琐的 yield, 有类似 Go 语言...原创 2020-03-15 05:26:02 · 543 阅读 · 0 评论