系统架构设计
文章平均质量分 91
王清培
这个作者很懒,什么都没留下…
展开
-
大型直播平台应用架构浅谈
大型直播平台应用架构浅谈进入直播领域有段时间了。跟大多数同学一样,刚接触直播这个领域都非常好奇这个领域的宏观架构大概是什么样子的。这里根据自己的这段时间学习,粗浅总结下分享给感兴趣的小伙伴扫扫盲。目前直播平台有很多,抖/快、B站、斗/虎等。直播这种高效的交互方式是各行业需要具备的能力,随着网络技术的发展也是必然趋势。先抛开每家直播的内容不同之外,一个完整的直播平台至少需要包含如下几个核心功能。观看直播、发送弹幕、打赏送礼、主播互动。我们以一个普通的C端用户的视角,来看下这几个核心功能背后的大原创 2022-02-13 14:38:24 · 4895 阅读 · 1 评论 -
Mysql大并发热点行更新的两个骚操作
要想db操作的性能足够高,巧妙的设计很重要,事务的操作范围要尽量的小。一般情况下我们都是使用某个orm框架来操作db,这一类框架多数的实现方式都是夸网络多次交互来开启事务上下文和执行sql操作,是个黑盒子,包括对 autocommit 设置的时机也会有一些差异,稍微不注意就会踩坑。在大并发的情况下加上夸网络多次交互,就不可避免的由于网络延迟、丢包等原因导致事务的执行时间过长,出现雪崩概率会大大增...原创 2019-11-30 16:06:05 · 631 阅读 · 1 评论 -
.NET应用架构设计—表模块模式与事务脚本模式的代码编写
阅读目录:1.背景介绍2.简单介绍表模块模式、事务脚本模式3.正确的编写表模块模式、事务脚本模式的代码4.总结1.背景介绍要想正确的设计系统架构就必须能正确的搞懂每个架构模式的用意,而不是胡子眉毛一把抓。现在有一个现象是什么呢,项目的结构从表面上看是很不错,层分的很合理,其实对业务系统来说也就那么几种层设计方法,但是现在很多项目的逻辑架构的设计不是理想,有很多概念大家并原创 2014-08-25 21:06:39 · 884 阅读 · 1 评论 -
.NET应用架构设计—适当使用活动记录模式代替领域模型模式
阅读目录:1.背景介绍2.简单介绍领域模型模式、活动记录模式3.活动记录模式的简单示例及要点4.总结1.背景介绍对软件开发方法论有兴趣的博友应该发现最近“领域驱动设计”慢慢的被人发现被人实践起来,园子里也慢慢有了DDD的学习气氛和宝贵实战经验的分享。其实之前我也痴迷于DDD,为什么会痴迷于它并不是因为它是所谓的新技术,也不是因为各种对它的炒作,而是我觉得我找到了能解放我原创 2014-08-30 20:58:42 · 1129 阅读 · 0 评论 -
.NET应用架构设计—工作单元模式(摆脱过程式代码的重要思想,逆袭DDD)
阅读目录:1.背景介绍2.过程式代码的真正困境3.工作单元模式的简单示例4.总结1.背景介绍一直都在谈论面向对象开发,但是开发企业应用系统时,使用面向对象开发最大的问题就是在于,多个对象之间的互操作需要涉及数据库操作。两个业务逻辑对象彼此之间需要互相调用,如果之间的互相操作是在一个业务事务范围内的,很容易完成,但是如果本次业务逻辑操作涉及到多个业务对象一起协作完成时原创 2014-09-01 21:22:29 · 5673 阅读 · 0 评论 -
后端服务性能压测实践
后端服务性能压测实践标签(空格分隔): 性能 压测 后端服务 压测实践作者:王清培(Plen wang) 背景环境检测 压力机及压力工具检测Linux openfiles limit 设置排查周边依赖空接口压测检测聚合报告中 throughput 计算压测及性能排查方法 关注各纬度 logLinux 常规命令性能排查两种方式(从上往下、从下往上)总结背景最近大半年内有过两次原创 2017-12-02 09:53:56 · 940 阅读 · 0 评论 -
微服务架构—自动化测试全链路设计
微服务架构—自动化测试全链路设计标签:microServices autoTest mock unitTest testTrace背景被忽视的软件工程环节 - DEVTESTOPS微服务架构下测试复杂度和效率问题开发阶段 unitTest mock 外部依赖连调阶段 mock 外部依赖自动化测试阶段 mock 需求autoTest Mock Gateway 浮出水面轻量级版...原创 2018-07-08 14:48:42 · 2018 阅读 · 1 评论 -
数据分表小结
数据分表小结标签: sharding 数据表拆分背景分库、分表带来的后遗症分表策略一些注意事项背景最近一段时间内结束了数据库表拆分项目,这里做个简单的小结。本次拆分主要包括订单和优惠券两大块,这两块都是覆盖全集团所有分子公司所有业务线。随着公司的业务飞速发展,不管是存储的要求,还是写入、读取的性都基本上到了警戒水位。订单是交易的核心,优惠券是营销的核心,这...原创 2018-07-21 17:11:42 · 257 阅读 · 0 评论 -
RabbitMQ 可靠投递
RabbitMQ 可靠投递标签: RabbitMQ shovel-plugin ConfirmCallback RabbitMQ消息投递背景confirmCallback 确认模式returnCallback 未投递到 queue 退回模式shovel-plugin 跨机房可靠投递背景在使用 RabbitMQ 的时候,作为消息发送方希望杜绝任何消息丢失或者投递失败...原创 2018-07-28 12:00:13 · 440 阅读 · 1 评论 -
zookeeper 实现分布式锁安全用法
zookeeper 实现分布式锁安全用法标签: zookeeper sessionExpire connectionLoss 分布式锁背景ConnectionLoss 链接丢失SessionExpired 会话过期绕开 zookeeper broker 进行状态通知leader 选举与zkNode 断开做好幂等静态扩容、动态扩容背景分布式锁现在用的越来越多,通常用来协调多...原创 2019-01-26 12:59:48 · 302 阅读 · 1 评论 -
Elasticsearch 评分排序
背景通过脚本改变评分背景近期有一个需求,需要对优惠券可用商品列表加个排序,只针对面值类的券不包括折扣券。需求是这样的,假设有一张面值券 50 块钱,可用商品列表 A 100、B 40、C 10,当用户查询当前券可用商品列表的时候优先将卡券可以直接抵扣且不需要用户在额外支付的商品排在前面。C 10B 40A 100其实排序有很多侧重,比如:1.根据用户利益最大化原则,排序...原创 2019-02-23 19:46:15 · 1003 阅读 · 1 评论 -
.NET应用架构设计—重新认识分层架构(现代企业级应用分层架构核心设计要素)
阅读目录:1.背景介绍2.简要回顾下传统三层架构3.企业级应用分层架构(现代分层架构的基本演变过程)3.1.服务层中应用契约式设计来解决动态条件不匹配错误(通过契约式设计模式来将问题在线下暴露出来)3.2.应用层中的应用控制器模式(通过控制器模式对象化应用层的职责)3.3.业务层中的命令模式(事务脚本模式的设计模式运用,很好的隔离静态数据)4.服务层作为SOA契原创 2014-08-19 21:41:24 · 1389 阅读 · 0 评论 -
.NET应用架构设计—面向查询的领域驱动设计实践(调整传统三层架构,外加维护型的业务开关)
阅读目录:1.背景介绍2.在业务层中加入核心领域模型(引入DomainModel,让逻辑、数据有家可归,变成一个完整的业务对象)3.统一协调层Application Layer(加入协调层来转换DomianModel)4.从数据扁平结构转换成OO体系结构(使用OO丰富代码结构)5.DomainModel中的内容(带开关的Specification、SOA化的Specific原创 2014-02-16 12:12:20 · 1367 阅读 · 0 评论 -
.NET可逆框架设计
前段时间一直在学习和研究.NET事务处理,慢慢的我发现可以使用事务处理来实现一种可逆的系统框架。这种框架在一些IT社区似乎还没有见过,但是在我们日常开发中确实有这个需求。所以我花了点时间深入的研究了一下事务的原理和使用,实现了以事务为纽带,以资源为操作对象的可逆框架。这里我假设您对事务有了整体的认识,也对自定义事务管理器有过了解。[王清培版权所有,转载请给出署名](可以参考本人的:.NET原创 2012-06-24 22:54:15 · 4166 阅读 · 2 评论 -
.NET面向上下文、AOP架构模式(概述)
1. 上下文概述上下文:其实就是一个逻辑上的业务、功能区域。在这个逻辑区域里可以有效的进行管理,算是一种制度的约束,也可以理解为某种范围类的数据共享。其实在很多应用框架中到处可以看见上下文的概念,包括.NET本身的设计就建立在这种思想上的。实例化的对象默认存在于系统中的默认上下文中,我们可以构建自己的上下文将对象在运行时进行合理的管理。在ASP.NET框架中比较经典的就是HttpCon原创 2012-07-29 19:31:09 · 2037 阅读 · 0 评论 -
.NET面向上下文、AOP架构模式(实现)
1.上下文Context、面向切面编程AOP模型分析在本人的“.NET面向上下文、AOP架构模式(概述)”一文中,我们大概了解了上下文如何辅助对象在运行时的管理。在很多时候我们急需在运行时能把对象控制在一定的逻辑范围内,在必要的时候能让他们体现出集中化的概念,如人群、车辆、动物等等。而Context与AOP有着密切的联系,Context表示逻辑抽象的范围而AOP描述了在这个逻辑范围内如何进行控原创 2012-08-08 14:38:53 · 6349 阅读 · 0 评论 -
.NET深入解析LINQ框架(五:IQueryable、IQueryProvider接口详解)
3.5.环路执行对象模型、碎片化执行模型(假递归式调用)3.6.N层对象执行模型(纵横向对比链式扩展方法)3.7.LINQ查询表达式和链式查询方法其实都是空壳子3.8.详细的对象结构图(对象的执行原理)3.9.IQueryable与IQueryProvider一对一的关系能否改成一对多的关系4.完整的自定义查询3.5】. 环路执行对象模型、碎片化执行原创 2012-12-13 21:43:33 · 3607 阅读 · 0 评论 -
.NET领域驱动设计—初尝(三:穿过迷雾走向光明)
开篇介绍在开始这篇富有某种奇妙感觉的文章之旅时我们先短暂的讨论一下关于软件开发方法论的简要:纵观软件开发方法论,从瀑布模型、螺旋模型、RUP(统一软件开发过程)、XP(极限编程)、Agile(敏捷开发)一路走来,他们的好他们的美,我想接触过的人都会口口称赞,都是大师们一身的经验结晶最后沉淀为专业的技术方向、技术领域,带领我们软件开发者们永无止境的前进,目睹一场又一场的美景一桌又一桌盛宴。他原创 2013-07-01 11:37:57 · 3542 阅读 · 2 评论 -
.NET框架设计—常被忽视的C#设计技巧
本文中的内容都是我无意中发现觉得有必要分享一下的设计经验,没有什么高深的技术,只是平时我们可能会忽视的一些设计技巧;为什么有这种想法是因为之前跟一些同事交流技术的时候会发现很多设计思维被固化了,比如之前我在做客户端框架开发的时候会去设计一些关于Validator、DTO Transfer等常用的Common function,但是发现在讨论某一些技术实现的时候会被弄的云里雾里的,会自我郁闷半天,不会及时的明白对方在说的问题; 后来发现他们一是没有把概念分清楚,比如.NETFramework、C#、Vis原创 2013-07-29 16:56:46 · 3882 阅读 · 2 评论 -
.NET框架设计—常被忽视的框架设计技巧
通过上一篇的“.NET框架设计—常被忽视的C#设计技巧”一文来看,对于框架设计的技巧还是有很多人比较有兴趣的,那么框架设计思想对于我们日常开发来说其实并不是很重要,但是对于我们理解框架背后的运行原理至关重要;当我们使用着LINQ灵活的语法的同时我们是否能理解它的背后运行原理、设计原理更深一点就是它的设计模式及复杂的对象模型;原创 2013-08-04 19:26:23 · 1454 阅读 · 0 评论 -
.NET框架设计(高级框架架构模式)—钝化程序、逻辑冻结、冻结程序的延续、瞬间转移
这一篇文章我早准备写的,迟迟未写的原因是它过于抽象不太容易表达,也很难掌握;之前对它的理解还处于比较简单的功能性上,但是最近随着对领域驱动设计及架构的研究,设计思想有了一个提升对它的理解也有了一个更清晰的轮廓,所以才敢下手去写,这么好的一篇文章不能搞砸了;“钝化语句” 简单描述:将基于栈的调用抽象成基于我们自己构建的虚拟运行时调用;比如我们可以将普通的IF\ELSE调用进行对象化,然后就可以对他们进行面向对象的设计了;能做的事情就太多了,比如将所有的方法放入一个for循环语句组件当中去,它会自动的去原创 2013-08-11 17:22:50 · 1615 阅读 · 0 评论 -
.NET领域驱动设计—看DDD是如何运用设计模式颠覆传统架构
这篇文章不会太长,但是绝对让你对DDD有一个比较直观的认可;这篇文章所讲到的内容虽然不多但是不太容易被领悟(因为多数人对DDD的理解还是存在很大误区的;),当然也不是多么神奇的东西,只不过是本人最近一直研究DDD的成果一个小小的心得与大家分享一下;本文讲的这些设计方式本身就存在着很大优势,你会发现它与传统三层架构最明显的区别,这也是最有经典优势的地方,最有价值的地方;本来这篇文章是“[置顶].NET领域驱动设计—实践(穿过迷雾走向光明)”一文的一部分但是由于时间关系,完整的示例并没有跟文章同步发布,原创 2013-08-18 16:58:02 · 12020 阅读 · 2 评论 -
.NET项目开发—浅谈面向接口编程、可测试性、单元测试、迭代重构(项目小结)
阅读目录:1.开篇介绍 2.迭代测试、重构(强制性面向接口编程,要求代码具有可测试性)2.1.面向接口编程的两个设计误区2.1.1.接口的依赖倒置2.1.2.接口对实体的抽象 2.2.迭代单元测试、重构(代码可测试)2.2.1.LINQ表达式对单元测试的影响 1】开篇介绍最近一段时间结束了一个小项目的开发,觉得有些好东西值得总结与原创 2013-08-25 13:40:15 · 1455 阅读 · 0 评论 -
.NET应用架构设计—面向查询服务的参数化查询设计(分解业务点,单独配置各自的数据查询契约)
我们有一个SOA商品(Item)查询接口,这个接口很通用,主要用来支撑日常很多其他系统的大量关于Item的查询,尤其是在高峰期间该服务的压力是很大的;我们站在SOA的角度看这个接口,这个通用的接口解决了众多的查询业务,确实不错,但是我们切换一下角度,站在每一个调用接口的访问端看似乎并不是很满意或者说牺牲了部分性能上的代价,因为我们无法干净利落的只获取当前这个业务点需要的数据项;这个Item服务接口所返回的数据项必须同时满足所有调用它的业务点,哪怕这次调用我只需要用到Item的三分之一的数据字段都不行,每次都原创 2014-02-06 19:03:23 · 1433 阅读 · 1 评论 -
.NET对存储过程的调用抽象封装
最近一边参与公司的项目开发,一边还肩负着基础库的创建和维护。真真切切的体会到写框架的不容易,写出好的,方便使用的框架更不容易,需要考虑的东西太多,需要掌握的东西太多。不过不要紧我们正在前进的道路上。同志们一起加油!最近在使用存储过程的时候总觉得有点麻烦,尽管在前期对ORM和统一数据源接口封装已经下了很多功夫,对IDataParameter之类的接口已经进行了很好的封装,但是还是觉得麻烦。[王清原创 2012-06-14 23:03:53 · 1697 阅读 · 0 评论