摘要: 电商系统架构 在电商领域,存在着典型的秒杀业务场景,那何谓秒杀场景呢。简单的来说就是一件商品的购买人数远远大于这件商品的库存,而且这件商品在很短的时间内就会被抢购一空。 比如每年的618、双11大促,小米新品促销等业务场景,就是典型的秒杀业务场景。 我们可以将电商系统的架构简化成下图所示。 由图所示 阅读全文
posted @ 2020-04-10 10:45 jk波 阅读(10) 评论(0) 推荐(0)
摘要: 1、安装rabbitmq 2、crontab定时检测rabbtimq状态 2、使用thinphp6.0框架rabbitmq示例,supervisor守护消费者 3、RabbitMQ有四种交换机类型 rabbitmq组成部分如下: Broker:消息队列服务进程,此进程包括两个部分:Exchange和 阅读全文
posted @ 2024-02-22 15:09 jk波 阅读(114) 评论(0) 推荐(0)
摘要: 1 理论知识 1.1 分库分表是否必要 分库分表确实可以解决单表数据量大这个问题,但是并非首选。因为分库分表至少引入了三个必须解决的突出问题。 第一是分库分表方案本身具有的复杂性。第二是本地事务失效问题,原本在同一个数据库中可以保证强一致性业务逻辑,分库之后事务失效。第三是难以聚合查询问题,因为分库 阅读全文
posted @ 2023-05-18 11:49 jk波 阅读(153) 评论(0) 推荐(0)
摘要: 一,基本命令: 1,查看命令帮助文档 #man 命令英文原意:manual man kill : 查看kill命令的文档 二,查看服务器运行情况 1,进程 #查看指定进程格式 ps -ef | grep php UID PID PPID C STIME TTY TIME CMD root 17285 阅读全文
posted @ 2023-03-07 13:39 jk波 阅读(181) 评论(0) 推荐(0)
摘要: RabbitMQ简要概括 1、AMQP:Advanced Message Queuing Protocol,是一个提供统一消息服务的应用层标准协议。 2、IPC(单一系统进程间通信) -> socket(不同机器间进程通信) -> AMQP(解决大型系统模块与组件间通信) 3、RabbitMQ 基于 阅读全文
posted @ 2023-03-02 17:12 jk波 阅读(86) 评论(0) 推荐(0)
摘要: supervisor是用python开发的一个在linux系统下的进程管理工具,可以方便的监听,启动,停止一个或多个进程。当一个进程被意外杀死后,supervisor监听到后,会自动重新拉起进程。 一、supervisor的安装 1、通过easy_install安装 yum -y install p 阅读全文
posted @ 2023-01-31 15:29 jk波 阅读(195) 评论(0) 推荐(0)
摘要: 基础数据准备 准备一个数据表作为 数据演示 这里面一共 创建了三个索引 联合索引 sname, s_code, address 主键索引 id 普通索引 height SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- -- Table structu 阅读全文
posted @ 2022-11-07 11:40 jk波 阅读(37) 评论(0) 推荐(0)
摘要: 用于生产环境中的PHP需要对其进行优化,让PHP自身发挥更好的性能,除了写好PHP代码,还要配置好php-fpm以及php.ini调优。本文从内存、OPcache、上传、会话以及安全等方面讲解php.ini的配置调优。 PHP相对其他的编译性语言,最大的缺点在于每次请求都会去做一些模块解析,真正执行 阅读全文
posted @ 2022-10-20 17:22 jk波 阅读(131) 评论(0) 推荐(0)
摘要: 实战说明 最近在一个项目营销活动中,一位同事用到了Redis来实现商品的库存管理。在压测的过程中,发现存在超卖的情况。这里总结一篇如何正确使用Redis来解决秒杀场景下,超卖的情况。 演示步骤 这里不会直接给大家说明,该怎么去实现安全、高效的分布式锁。而是通过循序渐进的方式,通过不同的方式实现锁,并 阅读全文
posted @ 2022-10-20 16:30 jk波 阅读(207) 评论(0) 推荐(0)
摘要: composer的出现大大提升了开发的效率,当我们去开发什么功能的时候,大多时候我们都可以在composer仓库中找到相对应的轮子,来使用。如果自己也想写轮子给广大的php开发者使用,那么就该学习一下composer包如何开发了 composer项目初始化 这里我创建的文件夹 math compos 阅读全文
posted @ 2022-09-29 15:51 jk波 阅读(23) 评论(0) 推荐(0)
摘要: 1.命名规范 数据库表名、字段名、索引名等都需要命名规范,可读性高(一般要求用英文),让别人一看命名,就知道这个字段表示什么意思。 比如一个表的账号字段,反例如下: acc_no,1_acc_no,zhanghao 复制代码 正例: account_no,account_number 复制代码 表名 阅读全文
posted @ 2022-09-27 14:55 jk波 阅读(34) 评论(0) 推荐(0)
摘要: 说明文档 Laravel Project Introduction 一、PHPStorm + Laravel 6.x 开发环境说明 1. 通过Composer拉取Laravel 6.x composer create-project --prefer-dist laravel/laravel lar 阅读全文
posted @ 2020-12-25 13:41 jk波 阅读(30) 评论(0) 推荐(0)
摘要: 业务复杂、数据量大、并发量大的业务场景下,典型的互联网架构,一般会分为这么几层: •调用层,一般是处于端上的browser或者APP•站点层,一般是拼装html或者json返回的web-server层•服务层,一般是提供RPC调用接口的service层•数据层,提供固化数据存储的db 对于库存业务, 阅读全文
posted @ 2020-12-23 14:38 jk波 阅读(44) 评论(0) 推荐(0)
摘要: git开发示例 获取代码/获取最新代码$ git clone http://192.168.100.249/root/shop.git //克隆代码,此处url为测试地址,工作中请更改为实际地址。如果你本地已经有代码,在开发新功能之前你应该获取最新状态$ git pull //拉取最新代码 创建de 阅读全文
posted @ 2020-07-07 11:06 jk波 阅读(23) 评论(0) 推荐(0)
摘要: Mysql 性能优化Explain详解 explain 功能我们在日常使用中,使用慢查询找到执行时间比较久的查询,然后使用SHOW STATUS、SHOW PROFILE、和explain做单条语句的分析。使用explain关键字可以模拟优化器执行sql查询语句,从而知道Mysql是如何处理你的sq 阅读全文
posted @ 2020-01-13 10:38 jk波 阅读(24) 评论(0) 推荐(0)
摘要: # MySQL的存储引擎 `MyISAM`(默认表类型):非事务的存储引擎,基于传统的`ISAM`(有索引的顺序访问方法)类型,是存储记录和文件的标准方法,不是事务安全,不支持外键,适用于频繁的查询。表锁,不会出现死锁,适合小数据和小并发。 - 为什么不会出死锁?(没有事务就不会继续持有锁) 答:因 阅读全文
posted @ 2019-12-17 15:06 jk波 阅读(8) 评论(0) 推荐(0)
摘要: Mysql主从复制原理及实践 mysql主从框架 MySQL主从架构是MySQL集群中最基本也是最常用的一种架构部署,能够满足很多业务需求,常见的有一主一从或者一主多从。可以防止单一主机的数据丢失,提高数据的安全性,务上可以实现读写分离,可以把一些读操作在从服务器上执行,减小主服务器的负担。 主从复 阅读全文
posted @ 2019-12-16 10:52 jk波 阅读(8) 评论(0) 推荐(0)
摘要: 版权说明: 本文章版权归本人及博客园共同所有,转载请标明原文出处( https://www.cnblogs.com/mikevictor07/p/12013507.html ),以下内容为个人理解,仅供参考。 前言: 本文主要基于MySQL 5.6以后版本编写,多数知识来着书籍《MySQL技术内幕+ 阅读全文
posted @ 2019-12-16 10:14 jk波 阅读(5) 评论(0) 推荐(0)
摘要: 首先我们用go-micro构建一个服务。(关于go-micro的使用可以参照官方实例或者文档) //新建一个微服务 micro new --type "srv" user-srv 定义我们的服务,这里定义两个rpc服务,Register和User 1 // 修改proto 2 syntax = "p 阅读全文
posted @ 2019-12-12 11:35 jk波 阅读(28) 评论(0) 推荐(0)
摘要: 是否想过PHP使用redis作为缓存时,如何能: 前后台模块共用Model层; 但是,不能每个Model类都进行缓存,这样太浪费Redis资源; 前后台模块可以自由决定从数据库还是从缓存读数据; 没有冗余代码; 使用方便。这里我们先展示实现的最终效果。 最终的代码和使用说明请移步Github:htt 阅读全文
posted @ 2019-12-11 10:20 jk波 阅读(11) 评论(0) 推荐(0)
摘要: 简单定时任务解决方案:使用redis的keyspace notifications(键失效后通知事件) ; (A)业务场景: 1、当一个业务触发以后需要启动一个定时任务,在指定时间内再去执行一个任务(如自动取消订单,自动完成订单等功能) 2、redis的keyspace notifications 阅读全文
posted @ 2019-12-06 10:27 jk波 阅读(32) 评论(0) 推荐(0)
摘要: 一、从数据一致性谈起1、数据一致性的情形2、数据一致性的概念3、数据一致性的原理4、数据一致性的协议二、分布式服务间的数据一致性三、分布式事务一致性解决方案1、接口同步调用模式与一致性解决方案2、接口异步调用模式与一致性解决方案3、消息异步处理模式与一致性解决方案四、保证操作幂等性的常用方法五、总结 阅读全文
posted @ 2019-12-06 10:25 jk波 阅读(22) 评论(0) 推荐(0)
摘要: 一、数据库架构原则二、常见的架构方案方案一:主备架构,只有主库提供读写服务,备库冗余作故障转移用方案二:双主架构,两个主库同时提供服务,负载均衡方案三:主从架构,一主多从,读写分离方案四:双主+主从架构,看似完美的方案三、一致性解决方案第一类:主库和从库一致性解决方案第二类:DB和缓存一致性解决方案 阅读全文
posted @ 2019-12-05 10:36 jk波 阅读(10) 评论(0) 推荐(0)
摘要: 1、什么是mysql主从同步? 当master(主)库的数据发生变化的时候,变化会实时的同步到slave(从)库。 2、主从同步有什么好处? 水平扩展数据库的负载能力。 容错,高可用。Failover(失败切换)/High Availability 数据备份。 3、主从同步的原理是什么? 首先我们来 阅读全文
posted @ 2019-12-04 09:58 jk波 阅读(5) 评论(0) 推荐(0)
摘要: Auth 类已经在ThinkPHP代码仓库中存在很久了,但是因为一直没有出过它的教程, 很少人知道它, 它其实比RBAC更方便 。 RBAC是按节点进行认证的,如果要控制比节点更细的权限就有点困难了,比如页面上面的操作按钮, 我想判断用户权限来显示这个按钮, 如果没有权限就不会显示这个按钮; 再比如 阅读全文
posted @ 2019-12-03 10:40 jk波 阅读(23) 评论(0) 推荐(0)
摘要: 为什么要这样做? 默认情况下,Redis 服务会提供 16 个数据库,Laravel 使用数据库 0 (请见 Redis 文档)作为缓存和 Session 的存储。 在执行命令 php artisan cache:clear 清除缓存时,会把 Session 也连带清除了,可以通过以下设置来避免这个 阅读全文
posted @ 2019-12-02 10:34 jk波 阅读(21) 评论(0) 推荐(0)
摘要: 由于PHP不支持多线程,但是作为一个完善的系统,有很多操作都是需要异步完成的。为了完成这些异步操作,我们做了一个基于Redis队列任务系统。 大家知道,一个消息队列处理系统主要分为两大部分:消费者和生产者。 在我们的系统中,主系统作为生产者,任务系统作为消费者。 具体的工作流程如下: 1、主系统将需 阅读全文
posted @ 2019-12-02 10:32 jk波 阅读(39) 评论(0) 推荐(0)
摘要: 简单定时任务解决方案:使用redis的keyspace notifications(键失效后通知事件) 需要注意此功能是在redis 2.8版本以后推出的,因此你服务器上的reids最少要是2.8版本以上; (A)业务场景: 1、当一个业务触发以后需要启动一个定时任务,在指定时间内再去执行一个任务( 阅读全文
posted @ 2019-11-29 15:06 jk波 阅读(12) 评论(0) 推荐(0)
摘要: 延迟队列,顾名思义它是一种带有延迟功能的消息队列。 那么,是在什么场景下我才需要这样的队列呢? 一、背景 先看看一下业务场景: 1.会员过期前3天发送召回通知 2.订单支付成功后,5分钟后检测下游环节是否都正常,比如用户购买会员后,各种会员状态是否都设置成功 3.如何定期检查处于退款状态的订单是否已 阅读全文
posted @ 2019-11-29 15:05 jk波 阅读(96) 评论(0) 推荐(0)
摘要: 本文假设你已经有了 Linux 操作系统的 PHP 环境,强烈推荐使用 Vagrant 来搭建开发环境安装 Swoole PECL 拓展可以通过 pecl 命令或者通过源码包编译安装,本文采用 pecl 命令来安装 Swoole在命令行输入 $ > pecl install swoole 安装 Sw 阅读全文
posted @ 2019-11-28 16:38 jk波 阅读(19) 评论(0) 推荐(0)
摘要: ThinkPHP使用Swoole需要安装 think-swoole Composer包,前提系统已经安装好了Swoole PECL 拓展* tp5的项目根目录下执行composer命令安装think-swoole: composer require topthink/think-swoole 话不多 阅读全文
posted @ 2019-11-28 16:37 jk波 阅读(90) 评论(0) 推荐(0)