Fork me on GitHub
摘要: stable diffusion打造自己专属的LORA模型 通过Lora小模型可以控制很多特定场景的内容生成。 但是那些模型是别人训练好的,你肯定很好奇,我也想训练一个自己的专属模型(也叫炼丹~_~)。 甚至可以训练一个专属家庭版的模型(family model),非常有意思。 将自己的训练好的Lora模型放到stableDiffusion lora 目录中 阅读全文
posted @ 2023-04-09 22:48 王清培 阅读(10062) 评论(7) 推荐(4) 编辑
摘要: keras图片数字识别入门AI机器学习 通过使用mnist(AI界的helloworld)手写数字模型训练集,了解下AI工作的基本流程。 本例子,要基于mnist数据集(该数据集包含了【0-9】的模型训练数据集和测试数据集)来完成一个手写数字识别的小demo。 mnist数据集,图片大小是28*28的黑白。包含了6w 训练数据和1w验证数 阅读全文
posted @ 2023-03-09 21:49 王清培 阅读(387) 评论(0) 推荐(2) 编辑
摘要: 一文带你了解webrtc基本原理(动手实现1v1视频通话) webrtc (Web Real-Time Communications) 是一个实时通讯技术,也是实时音视频技术的标准和框架。 大白话讲,webrtc是一个集大成的实时音视频技术集,包含了各种客户端api、音视频编/解码lib、流媒体传输协议、回声消除、安全传输等。 对于开发者来说可以借助webr 阅读全文
posted @ 2022-08-06 20:26 王清培 阅读(2616) 评论(7) 推荐(2) 编辑
摘要: k8s CustomResourceDefinition invalid 错误 安装 CRD 出现这个错误,多数是版本问题,缺少openAPIV3Schema段定义。 The CustomResourceDefinition "crontabs.stable.example.com" is invalid: * spec.versions[0].schema.openAPIV3 阅读全文
posted @ 2022-05-15 09:36 王清培 阅读(652) 评论(0) 推荐(0) 编辑
摘要: 大型直播平台应用架构浅谈 进入直播领域有段时间了。 跟大多数同学一样,刚接触直播这个领域都非常好奇这个领域的宏观架构大概是什么样子的。 这里根据自己的这段时间学习,粗浅总结下分享给感兴趣的小伙伴扫扫盲。 目前直播平台有很多,抖/快、B站、斗/虎等。 直播这种高效的交互方式是各行业需要具备的能力,随着网络技术的发展也是必然趋势。 阅读全文
posted @ 2022-02-13 14:43 王清培 阅读(3550) 评论(8) 推荐(33) 编辑
摘要: minikube metrics-server HPA 自动扩缩容错误 minikube metrics-server pod 错误 启动 minikube addons enable metrics-server 之后查看 metrics-server pod 会有如下错误 Failed to pull image "k8s.gcr.io/metrics-server 阅读全文
posted @ 2021-12-11 18:26 王清培 阅读(1011) 评论(0) 推荐(0) 编辑
摘要: minikube addons enable ingress 启动错误 使用minikube 学习ingress部分的时候。一定会踩到的坑。 minikube addons enable ingress 遇到的一系列错误。 waiting for pod "app.kubernetes.io/name=ingress-nginx", current state: Pending 阅读全文
posted @ 2021-10-04 10:06 王清培 阅读(2453) 评论(9) 推荐(2) 编辑
摘要: 在使用minikube学习的时候,会出现你在mac上安装的minikube默认是最新版本,但是实际情况是需要安装低一些版本。可以按照k8s官方文档安装的时候指定不同安装版本,如果很慢或者无法访问直接走github安装也行。 阅读全文
posted @ 2021-05-29 10:20 王清培 阅读(932) 评论(0) 推荐(1) 编辑
摘要: 万级TPS亿级流水-中台账户系统架构设计 万级TPS亿级流水-中台账户系统架构设计 标签:高并发 万级TPS 亿级流水 账户系统 背景 业务模型 应用层设计 数据层设计 日切对账 背景 我们需要给所有前台业务提供统一的账户系统,用来支撑所有前台产品线的用户资产管理,统一提供支持大并发万级TPS、亿级流水、数据强一致、风控安全、日切对账、财务 阅读全文
posted @ 2020-06-20 17:35 王清培 阅读(4658) 评论(6) 推荐(6) 编辑
摘要: Golang 简单的读负责均衡 read-loadbalance master-slave(n) 读库集群负载均衡器(简单轮询)+时间间隔错峰。 github 地址:https://github.com/Plen-wang/read-loadbalance 使用场景 1.一般我们会有多个从库,需要在从库的读取上做负载均衡。 2.在 阅读全文
posted @ 2020-02-23 15:55 王清培 阅读(795) 评论(0) 推荐(0) 编辑
摘要: 有两个隐藏事务提交时间点需要注意,第一个是 `autocommit=1` _Mysql session_ 级别的自动提交变量,所有 _ORM_ 框架中的事务提交控制都会受到这个字段影响,默认情况下当前语句会自动提交,但是如果是显示 _begin transaction_ 开启事务需要自行手动提交。有些时候 ORM 框架会根据一些设置或者策略,将 _autocommit_ 设置为0。 阅读全文
posted @ 2020-01-27 15:34 王清培 阅读(3066) 评论(0) 推荐(2) 编辑
摘要: golang 服务大量 CLOSE_WAIT 故障排查 事故经过 排查 总结 事故经过 【2019-12-27 18:00 周五】 业务方突然找来说调用我们程序大量提示“触发限流”,但是我们没有收到任何监控报警。紧急查看了下 ServiceMesh sidecar 代理监控发现流量持续在减少,但是监控中没有任何触发限流的 http code 429 占比 阅读全文
posted @ 2020-01-26 13:21 王清培 阅读(2938) 评论(4) 推荐(0) 编辑
摘要: 要想db操作的性能足够高,巧妙的设计很重要,事务的操作范围要尽量的小。一般情况下我们都是使用某个orm框架来操作db,这一类框架多数的实现方式都是夸网络多次交互来开启事务上下文和执行sql操作,是个黑盒子,包括对 `autocommit` 设置的时机也会有一些差异,稍微不注意就会踩坑。 在大并发的情况下加上夸网络多次交互,就不可避免的由于网络延迟、丢包等原因导致事务的执行时间过长,出现雪崩概率会大大增加。建议在性能和并发要求比较高的场景下尽量少用orm,如果非要用尽量控制好事务的范围和执行时间。 大并发db操作的原则就是事务操作尽量少跨网络交互,一旦跨网络使用事务尽量用乐观锁来解决,少用悲观锁,尽量缩短当前 __session__ 持有锁的时间。 阅读全文
posted @ 2019-11-30 15:51 王清培 阅读(5302) 评论(3) 推荐(2) 编辑
摘要: golang 服务诡异499、504网络故障排查 事故经过 排查 总结 事故经过 11-01 12:00 中午午饭期间,手机突然收到业务网关非200异常报警,平时也会有一些少量499或者网络抖动问题触发报警,但是很快就会恢复(目前配置的报警阈值是5%,阈值跟当时的采样窗口qps有直接关系)。 报警当时非200占比已经过10%并且在持续升高,根据历史 阅读全文
posted @ 2019-11-16 19:38 王清培 阅读(2729) 评论(0) 推荐(2) 编辑
摘要: 在业务快速增长中,前期只是验证模式是否可行,初期忽略程序发布重启带来的暂短停机影响。当模式实验成熟之后会逐渐放量,此时我们的发布停机带来的影响就会大很多。我们整个服务都是基于云,请求流量从 四层->七层->机器。 要想实现平滑重启大致有三种方案,一种是在流量调度的入口处理,一般的做法是 ApiGateway + CD ,发布的时候自动摘除机器,等待程序处理完现有请求再做发布处理,这样的好处就是程序不需要关心如何做平滑重启。 第二种就是程序自己完成平滑重启,保证在重启的时候 listen socket FD(文件描述符) 依然可以接受请求进来,只不过切换新老进程,但是这个方案需要程序自己去完成,有些技术栈可能实现起来不是很简单,有些语言无法控制到操作系统级别,实现起来会很 阅读全文
posted @ 2019-10-19 18:33 王清培 阅读(3755) 评论(5) 推荐(2) 编辑
摘要: vim 列编辑模式 vim 列编辑模式 标签: vim 视窗模式 列编辑模式 vim 列编辑模式 例子:给列批量添加前缀、后缀、修改字段 vim 列编辑模式 vim 有三种编辑模式,命令模式、输入模式、视窗模式,我们常用的是前两种模式,但是视窗模式还是非常不错的,进入 vim 编辑器,模式是命令模式,可以通过 i、a 阅读全文
posted @ 2019-06-29 10:09 王清培 阅读(10369) 评论(2) 推荐(0) 编辑
摘要: 分享ppt:https://pan.baidu.com/s/1Aerqtbi8VpMiFGhfEMUtPQ 阅读全文
posted @ 2019-05-17 12:52 王清培 阅读(918) 评论(0) 推荐(0) 编辑
摘要: 近期有一个需求,需要对优惠券可用商品列表加个排序,只针对面值类的券不包括折扣券。 需求是这样的,假设有一张面值券 50 块钱,可用商品列表 A 100、B 40、C 10,当用户查询当前券可用商品列表的时候优先将卡券可以直接抵扣且不需要用户在额外支付的商品排在前面。 阅读全文
posted @ 2019-02-23 19:35 王清培 阅读(13936) 评论(0) 推荐(2) 编辑
摘要: 分布式锁现在用的越来越多,通常用来协调多个并发任务。在一般的应用场景中存在一定的不安全用法,不安全用法会带来多个master在并行执行,业务或数据可能存在重复计算带来的副作用,在没有拿到lock的情况下扮演者master等诸如此类。 要想准确的拿到分布式锁,并且准确的捕获在分布式情况下锁的动态转移状态,需要处理网络变化带来的连锁反应。比如常见的 session expire、connectionLoss,在设置lock状态的时候我们如何保证准确拿到lock。 阅读全文
posted @ 2019-01-26 12:51 王清培 阅读(5392) 评论(1) 推荐(0) 编辑
摘要: 最近在陆续做机房升级相关工作,配合DBA对产线数据库链接方式做个调整,将原来直接链接读库的地址切换到统一的读负载均衡的代理 haproxy 上,方便机柜和服务器的搬迁。 切换之后线上时不时的会发生 discard connection 错误,导致程序报 500 错误,但不是每次都必现的。 开发框架: spring boot+mybatis+druid+shardingJDBC 网络架构: appserver->mysql(master) 写 appserver->haproxy->mysql(slave)/n 读 阅读全文
posted @ 2019-01-19 14:16 王清培 阅读(25996) 评论(3) 推荐(3) 编辑
摘要: stable diffusion打造自己专属的LORA模型 通过Lora小模型可以控制很多特定场景的内容生成。 但是那些模型是别人训练好的,你肯定很好奇,我也想训练一个自己的专属模型(也叫炼丹~_~)。 甚至可以训练一个专属家庭版的模型(family model),非常有意思。 将自己的训练好的Lora模型放到stableDiffusion lora 目录中 阅读全文
posted @ 2023-04-09 22:48 王清培 阅读(10062) 评论(7) 推荐(4) 编辑
摘要: keras图片数字识别入门AI机器学习 通过使用mnist(AI界的helloworld)手写数字模型训练集,了解下AI工作的基本流程。 本例子,要基于mnist数据集(该数据集包含了【0-9】的模型训练数据集和测试数据集)来完成一个手写数字识别的小demo。 mnist数据集,图片大小是28*28的黑白。包含了6w 训练数据和1w验证数 阅读全文
posted @ 2023-03-09 21:49 王清培 阅读(387) 评论(0) 推荐(2) 编辑
摘要: 一文带你了解webrtc基本原理(动手实现1v1视频通话) webrtc (Web Real-Time Communications) 是一个实时通讯技术,也是实时音视频技术的标准和框架。 大白话讲,webrtc是一个集大成的实时音视频技术集,包含了各种客户端api、音视频编/解码lib、流媒体传输协议、回声消除、安全传输等。 对于开发者来说可以借助webr 阅读全文
posted @ 2022-08-06 20:26 王清培 阅读(2616) 评论(7) 推荐(2) 编辑
摘要: k8s CustomResourceDefinition invalid 错误 安装 CRD 出现这个错误,多数是版本问题,缺少openAPIV3Schema段定义。 The CustomResourceDefinition "crontabs.stable.example.com" is invalid: * spec.versions[0].schema.openAPIV3 阅读全文
posted @ 2022-05-15 09:36 王清培 阅读(652) 评论(0) 推荐(0) 编辑
摘要: kubeadm init cannot find network namespace 错误 使用 kubeadm 安装好 weave 网络插件之后,查看 kubelet 输出信息发现如下错误: 4月 25 13:51:48 k8s-master kubelet[1232730]: I0425 13:51:48.124142 1232730 cni.go:334] "CNI failed t 阅读全文
posted @ 2022-05-04 11:56 王清培 阅读(629) 评论(0) 推荐(0) 编辑
摘要: 大型直播平台应用架构浅谈 进入直播领域有段时间了。 跟大多数同学一样,刚接触直播这个领域都非常好奇这个领域的宏观架构大概是什么样子的。 这里根据自己的这段时间学习,粗浅总结下分享给感兴趣的小伙伴扫扫盲。 目前直播平台有很多,抖/快、B站、斗/虎等。 直播这种高效的交互方式是各行业需要具备的能力,随着网络技术的发展也是必然趋势。 阅读全文
posted @ 2022-02-13 14:43 王清培 阅读(3550) 评论(8) 推荐(33) 编辑
摘要: minikube metrics-server HPA 自动扩缩容错误 minikube metrics-server pod 错误 启动 minikube addons enable metrics-server 之后查看 metrics-server pod 会有如下错误 Failed to pull image "k8s.gcr.io/metrics-server 阅读全文
posted @ 2021-12-11 18:26 王清培 阅读(1011) 评论(0) 推荐(0) 编辑
摘要: minikube addons enable ingress 启动错误 使用minikube 学习ingress部分的时候。一定会踩到的坑。 minikube addons enable ingress 遇到的一系列错误。 waiting for pod "app.kubernetes.io/name=ingress-nginx", current state: Pending 阅读全文
posted @ 2021-10-04 10:06 王清培 阅读(2453) 评论(9) 推荐(2) 编辑
摘要: 王清培 腾讯tvp之路 阅读全文
posted @ 2021-06-12 10:19 王清培 阅读(430) 评论(0) 推荐(0) 编辑
摘要: 在使用minikube学习的时候,会出现你在mac上安装的minikube默认是最新版本,但是实际情况是需要安装低一些版本。可以按照k8s官方文档安装的时候指定不同安装版本,如果很慢或者无法访问直接走github安装也行。 阅读全文
posted @ 2021-05-29 10:20 王清培 阅读(932) 评论(0) 推荐(1) 编辑
摘要: 万级TPS亿级流水-中台账户系统架构设计 万级TPS亿级流水-中台账户系统架构设计 标签:高并发 万级TPS 亿级流水 账户系统 背景 业务模型 应用层设计 数据层设计 日切对账 背景 我们需要给所有前台业务提供统一的账户系统,用来支撑所有前台产品线的用户资产管理,统一提供支持大并发万级TPS、亿级流水、数据强一致、风控安全、日切对账、财务 阅读全文
posted @ 2020-06-20 17:35 王清培 阅读(4658) 评论(6) 推荐(6) 编辑
摘要: Golang 简单的读负责均衡 read-loadbalance master-slave(n) 读库集群负载均衡器(简单轮询)+时间间隔错峰。 github 地址:https://github.com/Plen-wang/read-loadbalance 使用场景 1.一般我们会有多个从库,需要在从库的读取上做负载均衡。 2.在 阅读全文
posted @ 2020-02-23 15:55 王清培 阅读(795) 评论(0) 推荐(0) 编辑
摘要: 有两个隐藏事务提交时间点需要注意,第一个是 `autocommit=1` _Mysql session_ 级别的自动提交变量,所有 _ORM_ 框架中的事务提交控制都会受到这个字段影响,默认情况下当前语句会自动提交,但是如果是显示 _begin transaction_ 开启事务需要自行手动提交。有些时候 ORM 框架会根据一些设置或者策略,将 _autocommit_ 设置为0。 阅读全文
posted @ 2020-01-27 15:34 王清培 阅读(3066) 评论(0) 推荐(2) 编辑
摘要: golang 服务大量 CLOSE_WAIT 故障排查 事故经过 排查 总结 事故经过 【2019-12-27 18:00 周五】 业务方突然找来说调用我们程序大量提示“触发限流”,但是我们没有收到任何监控报警。紧急查看了下 ServiceMesh sidecar 代理监控发现流量持续在减少,但是监控中没有任何触发限流的 http code 429 占比 阅读全文
posted @ 2020-01-26 13:21 王清培 阅读(2938) 评论(4) 推荐(0) 编辑
摘要: 要想db操作的性能足够高,巧妙的设计很重要,事务的操作范围要尽量的小。一般情况下我们都是使用某个orm框架来操作db,这一类框架多数的实现方式都是夸网络多次交互来开启事务上下文和执行sql操作,是个黑盒子,包括对 `autocommit` 设置的时机也会有一些差异,稍微不注意就会踩坑。 在大并发的情况下加上夸网络多次交互,就不可避免的由于网络延迟、丢包等原因导致事务的执行时间过长,出现雪崩概率会大大增加。建议在性能和并发要求比较高的场景下尽量少用orm,如果非要用尽量控制好事务的范围和执行时间。 大并发db操作的原则就是事务操作尽量少跨网络交互,一旦跨网络使用事务尽量用乐观锁来解决,少用悲观锁,尽量缩短当前 __session__ 持有锁的时间。 阅读全文
posted @ 2019-11-30 15:51 王清培 阅读(5302) 评论(3) 推荐(2) 编辑
摘要: golang 服务诡异499、504网络故障排查 事故经过 排查 总结 事故经过 11-01 12:00 中午午饭期间,手机突然收到业务网关非200异常报警,平时也会有一些少量499或者网络抖动问题触发报警,但是很快就会恢复(目前配置的报警阈值是5%,阈值跟当时的采样窗口qps有直接关系)。 报警当时非200占比已经过10%并且在持续升高,根据历史 阅读全文
posted @ 2019-11-16 19:38 王清培 阅读(2729) 评论(0) 推荐(2) 编辑
摘要: 在业务快速增长中,前期只是验证模式是否可行,初期忽略程序发布重启带来的暂短停机影响。当模式实验成熟之后会逐渐放量,此时我们的发布停机带来的影响就会大很多。我们整个服务都是基于云,请求流量从 四层->七层->机器。 要想实现平滑重启大致有三种方案,一种是在流量调度的入口处理,一般的做法是 ApiGateway + CD ,发布的时候自动摘除机器,等待程序处理完现有请求再做发布处理,这样的好处就是程序不需要关心如何做平滑重启。 第二种就是程序自己完成平滑重启,保证在重启的时候 listen socket FD(文件描述符) 依然可以接受请求进来,只不过切换新老进程,但是这个方案需要程序自己去完成,有些技术栈可能实现起来不是很简单,有些语言无法控制到操作系统级别,实现起来会很 阅读全文
posted @ 2019-10-19 18:33 王清培 阅读(3755) 评论(5) 推荐(2) 编辑
摘要: vim 列编辑模式 vim 列编辑模式 标签: vim 视窗模式 列编辑模式 vim 列编辑模式 例子:给列批量添加前缀、后缀、修改字段 vim 列编辑模式 vim 有三种编辑模式,命令模式、输入模式、视窗模式,我们常用的是前两种模式,但是视窗模式还是非常不错的,进入 vim 编辑器,模式是命令模式,可以通过 i、a 阅读全文
posted @ 2019-06-29 10:09 王清培 阅读(10369) 评论(2) 推荐(0) 编辑
摘要: 分享ppt:https://pan.baidu.com/s/1Aerqtbi8VpMiFGhfEMUtPQ 阅读全文
posted @ 2019-05-17 12:52 王清培 阅读(918) 评论(0) 推荐(0) 编辑
摘要: 近期有一个需求,需要对优惠券可用商品列表加个排序,只针对面值类的券不包括折扣券。 需求是这样的,假设有一张面值券 50 块钱,可用商品列表 A 100、B 40、C 10,当用户查询当前券可用商品列表的时候优先将卡券可以直接抵扣且不需要用户在额外支付的商品排在前面。 阅读全文
posted @ 2019-02-23 19:35 王清培 阅读(13936) 评论(0) 推荐(2) 编辑
摘要: 分布式锁现在用的越来越多,通常用来协调多个并发任务。在一般的应用场景中存在一定的不安全用法,不安全用法会带来多个master在并行执行,业务或数据可能存在重复计算带来的副作用,在没有拿到lock的情况下扮演者master等诸如此类。 要想准确的拿到分布式锁,并且准确的捕获在分布式情况下锁的动态转移状态,需要处理网络变化带来的连锁反应。比如常见的 session expire、connectionLoss,在设置lock状态的时候我们如何保证准确拿到lock。 阅读全文
posted @ 2019-01-26 12:51 王清培 阅读(5392) 评论(1) 推荐(0) 编辑
摘要: 最近在陆续做机房升级相关工作,配合DBA对产线数据库链接方式做个调整,将原来直接链接读库的地址切换到统一的读负载均衡的代理 haproxy 上,方便机柜和服务器的搬迁。 切换之后线上时不时的会发生 discard connection 错误,导致程序报 500 错误,但不是每次都必现的。 开发框架: spring boot+mybatis+druid+shardingJDBC 网络架构: appserver->mysql(master) 写 appserver->haproxy->mysql(slave)/n 读 阅读全文
posted @ 2019-01-19 14:16 王清培 阅读(25996) 评论(3) 推荐(3) 编辑
摘要: 在使用 RabbitMQ 的时候,作为消息发送方希望杜绝任何消息丢失或者投递失败场景。RabbitMQ 为我们提供了两个选项用来控制消息的投递可靠性模式。 rabbitmq 整个消息投递的路径为: producer->rabbitmq broker cluster->exchange->queue->consumer message 从 producer 到 rabbitmq broker cluster 则会返回一个 confirmCallback 。 message 从 exchange->queue 投递失败则会返回一个 returnCallback 。我们将利用这两个 callback 控制消息的最终一致性和部分纠错能力。 阅读全文
posted @ 2018-07-28 11:57 王清培 阅读(16917) 评论(0) 推荐(8) 编辑
摘要: 最近一段时间内结束了数据库表拆分项目,这里做个简单的小结。 本次拆分主要包括订单和优惠券两大块,这两块都是覆盖全集团所有分子公司所有业务线。随着公司的业务飞速发展,不管是存储的要求,还是写入、读取的性都基本上到了警戒水位。 订单是交易的核心,优惠券是营销的核心,这两块基本上是整个平台的正向最核心部分。为了支持未来三到五年的快速发展,我们需要对数据进行拆分。 数据库表拆分业内已经有很多成熟方案,已经不是什么高深的技术,基本上是纯工程化的流程,但是能有机会进行实际的操刀一把机会还是难得,所以非常有必要做个总结。 阅读全文
posted @ 2018-07-21 17:05 王清培 阅读(2102) 评论(0) 推荐(0) 编辑
摘要: 从 __SOA__ 架构到现在大行其道的微服务架构,系统越拆越小,整体架构的复杂度也是直线上升,我们一直老生常谈的微服务架构下的技术难点及解决方案也日渐成熟(包括典型的数据一致性,系统调用带来的一致性问题,还是跨节点跨机房复制带来的一致性问题都有了很多解决方案),但是有一个环节我们明显忽略了。 在现在的微服务架构趋势下,微服务在运维层面和自动化部署方面基本上是比较完善了。从我个人经验来看,上层的开发、测试对微服务架构带来的巨大变化还在反应和学习中。 阅读全文
posted @ 2018-07-08 14:32 王清培 阅读(5034) 评论(1) 推荐(4) 编辑
摘要: 标签: 上海线下技术交流会 作者:王清培(Plen wang) 沪江Java资深架构师 、营销云平台负责人 上海地区技术线下交流,本次聚会AA制,要的就是热爱技术,交流技术,不是凑热闹。特此留念。 活动日程: 主题:电商平台架构设计 讲解人:王清培 居住地:上海 沪江 Java 架构师 、畅销书作者 阅读全文
posted @ 2018-04-16 15:55 王清培 阅读(1367) 评论(7) 推荐(10) 编辑
摘要: 标签: 花旗金融培训 作者:王清培(Plen wang) 沪江Java资深架构师 、营销云平台负责人 受邀给花旗金融(上海)培训,一直没时间整理,特此留念。 谢谢。 阅读全文
posted @ 2018-04-16 15:13 王清培 阅读(1326) 评论(0) 推荐(3) 编辑
摘要: 说到 ___hash table___ 有两个东西是我们经常会碰到的,首先就是 ___hash 碰撞___ 问题,__redis dict__ 是采用链地址法来解决,___dictEntry->next___ 就是指向下个冲突 __key__ 的节点。 还有一个经常碰到的就是 __rehash__ 的问题,提到 __rehash__ 我们还是有点担心性能的。那么redis 实现是非常巧妙的,采用 ___惰性渐进式 rehash 算法___ 。 阅读全文
posted @ 2018-01-27 09:24 王清培 阅读(2249) 评论(0) 推荐(1) 编辑
摘要: redis 为我们提供了 5 种数据类型,基本上我们使用频率最高的就是 string ,而对其他四种数据类型使用的频次稍弱于 string 。 一方面是由于 string 使用起来比较简单,可以方便存储复杂大对象,使用场景比较多。还有一个原因就是由于 redis expire time 只能设置在 key 上,像 list、hash、set、zset 属于集合类型,会管理一组 item,我们无法在这些集合的 item 上设置过期时间,所以使用 expire time 来处理集合的 cache 失效会变得稍微复杂些。但是 string 使用 expire time 来管理过期策略会比较简单,因为它包含的项少。这里说的集合是宽泛的类似集合。 导致我们习惯性的使用 string 阅读全文
posted @ 2018-01-21 11:05 王清培 阅读(5303) 评论(2) 推荐(4) 编辑
摘要: 最近大半年内有过两次负责性能压测的一些工作。一件事情做了一次可能还无法总结出一些东西,两次过后还是能发现一些共性问题,所以总结下性能压测的一般性实践。但是问题肯定不止这些,还有更多深层次的问题等着发现,等我们遇到了在逐个解决再来总结分享。 做性能压测的原因就不多说了,一般两个时间点是必须要做的,大促前、新系统上线。压测都是为了系统在线上的处理能力和稳定性维持在一个标准范围内,做到心中有数。 阅读全文
posted @ 2017-12-02 09:51 王清培 阅读(10058) 评论(3) 推荐(5) 编辑
摘要: 在之前的一次性能压测的时候我们发现一个细节问题,我们使用 __spring boot__ 创建的 __web rest__ 项目,使用默认 __spring mvc__ 作为 __web rest__ 框架。 这在使用上没有太大问题,但是有一个影响性能的细节问题被发现了,说实话这个问题很难被发现。 阅读全文
posted @ 2017-11-26 12:29 王清培 阅读(3956) 评论(2) 推荐(2) 编辑
摘要: 在使用 git 的时候我们都会面临多账户问题,比较常见的就是公司内部的 gitlab,开源平台 github ,我们都需要在一台电脑上同时使用,这需要解决两个问题。 阅读全文
posted @ 2017-11-18 14:00 王清培 阅读(925) 评论(0) 推荐(0) 编辑
摘要: 最近一段时间都在忙着转java项目最后的冲刺,前期的coding翻代码、debug、fixbug都逐渐收尾,进入上线前的性能压测。 虽然不是大促前的性能压测要求,但是为了安全起见,需要摸个底心里有个数。 毕竟这次转java的服务都是集团核心公共服务(主要是订单域服务)。(等我们顺利上线了,我再来好好总结下其中的坎坷和壮举。) 废话不多说了,直接进入主题。 由于这次压测主要重点是关注正向的两个核心订单服务,下单服务、查单服务。查单服务初步压测下来问题不大,主要是db的索引和cache的问题。 下单服务有两个核心接口,预订单查询、创建订单。预订单查询主要是订单的前置状态的结算页汇总计算(不仅是结算页),不落具体订单,如,各 阅读全文
posted @ 2017-09-23 14:38 王清培 阅读(2150) 评论(6) 推荐(5) 编辑
摘要: 最近一段时间与redis接触比较频繁。发现有些东西还是工作中经常会用到的,自己也花了点时间巩固下。本篇文章主要是以总结性的方式梳理,因为redis的主题很大,任何一个技术点展开都是几篇文章的量。也可以说这篇文章是个概览。 阅读全文
posted @ 2017-07-29 15:35 王清培 阅读(4150) 评论(9) 推荐(7) 编辑
摘要: .NET程序员转向JAVA领域,必备技术首当其冲就是JAVA Concurrency 并发编程。 最近系统性的学习了 Doug Lea 《JAVA并发编程实战》一书。这书很有嚼劲,进入JAVA技术体系必看书籍之一。 看完之后,在公司内部做了一个简单的内部分享,主要是普及下.NET程序员转向Java技术后对于并发的基本认识。 阅读全文
posted @ 2017-07-15 11:33 王清培 阅读(4569) 评论(4) 推荐(1) 编辑
摘要: 最近在使用alibaba druid进行多数据源连接的时候无意中发现一个小bug,已经提交github issue 官方已经fix。issue 地址:https://github.com/alibaba/druid/issues/1796 阅读全文
posted @ 2017-07-08 12:49 王清培 阅读(10517) 评论(1) 推荐(0) 编辑
摘要: redis setnx 命令特性 当指定key不存在时才设置。也就是说,如果返回1说明你的命令被执行成功了,redis服务器中的key是你之前设置的值。如果返回0,说明你设置的key在redis服务器里已经存在。 阅读全文
posted @ 2017-06-18 14:15 王清培 阅读(17840) 评论(6) 推荐(0) 编辑
摘要: 废话就不多说了,本文分享下博主在5.28大促压测期间解决的一个性能问题,觉得这个还是比较有意思的,值得总结拿出来分享下。 博主所服务的部门是作为公共业务平台,公共业务平台支持上层所有业务系统(2C、UGC、直播等)。平台中核心之一的就是订单域相关服务,下单服务、查单服务、支付回调服务,当然结算页暂时还是我们负责,结算页负责承上启下进行下单、结算、跳支付中心。每次业务方进行大促期间平台都要进行一次常规压测,做到心里有底。 在压测的上半场,陆续的解决一些不是太奇怪的问题,定位到问题时间都在计划内。下单服务、查单服务、结算页都顺利压测通过。但是到了支付回调服务压测的时候,有个奇怪的问题出现了。 阅读全文
posted @ 2017-06-04 15:40 王清培 阅读(3539) 评论(7) 推荐(4) 编辑
摘要: 最近一段时间公共业务平台在进行大面积的重构,对原来的技术栈进行迁移,逐渐往java、go、node.js等开源、自由为主的技术体系中过度。 虽然这主要是替换技术框架,但也是我们应用系统进行重新设计、业务流程重新梳理的一个好机会,我们将利用这次机会来重构之前发现的一些问题。 Martin Fowler大师《重构》一书中有说过一句话,大概意思就是,“每次对原有系统进行修改调整的时候是一个非常好的重构契机。” 阅读全文
posted @ 2017-06-03 08:09 王清培 阅读(9636) 评论(18) 推荐(30) 编辑
摘要: 在通常情况下你在使用消息中间件的时候,都是未经设计的使用,你没有把应用架构和系统架构边界搞清楚。消息中间件只是一个纯粹的技术工具,当你引入的时候是站在应用架构的角度引入的。这是架构的角度,也是架构的上帝视角,这样你就不会用到最后发现越来越混乱,而且也无法结合软件模式、方法论、最佳实践来综合提升系统的架构能力。 EDA(Event Driven Architecture,EDA) 事件驱动架构,它是一种用来在SOA或者Micro service中进行的架构模式。它的好处有几个,柔性具有很高的伸缩性。 阅读全文
posted @ 2016-12-10 19:46 王清培 阅读(46623) 评论(8) 推荐(33) 编辑