编程技巧
架构师修行之路
一个奔走在通往互联网更高之路的工程师,热衷于互联网技术。拥有10年+互联网开发经验。热衷于高性能、高并发、分布式技术领域的研究。 主要工作语言为asp.net c#和Golang 。
展开
-
数据库快速迁移10亿级数据
问题分析经过几分钟的排查,数据库情况如下:数据库采用Sqlserver 2008 R2,单表数据量21亿。无水平或者垂直切分,但是采用了分区表。分区表策略是按时间降序分的区,将近30个分区。正因为分区表的原因,系统才保证了在性能不是太差的情况下坚持至今。此表除聚集索引之外,无其他索引,无主键(主键其实是利用索引来快速查重的)。所以在频繁插入新数据的情况下,索引调整所耗费的性能比较低。至于聚集索引和非聚集索引等知识,请各位移步google或者百度。至于业务,不是太复杂。经过相关人.原创 2020-11-18 20:04:32 · 1786 阅读 · 1 评论 -
进击谷歌:多线程下程序顺序怎么稳定不乱?
题目比如我们有三个方法,类似以下代码 static void Methond1() { Console.WriteLine($"{Thread.CurrentThread.Name} 执行 第一个方法=="); } static void Methond2() { Console.WriteLine($"{Thread.CurrentThread.Name} 执行 第二个方法=======".原创 2020-11-17 21:55:23 · 1085 阅读 · 0 评论 -
假如需要一百万个对象
设计背景每个平台都会有用户这种基础数据的设计,作为最基础的用户,每个用户都有很多属性,比如性别,姓名,手机号等,每个用户还可以有类似经验值这样的荣誉系统,根据不同的经验值来对应不同的等级,不同的等级对应不同的荣誉UI,比如一级用户可能只显示一个星星,二级用户显示两颗星星,以此类推,类似于QQ等级的星星月亮太阳,这样的荣誉系统随着平台的不断壮大,可能会衍生出很多类型。那么问题来了,用户登录的时候就需要初始化用户的这些荣誉值,以星星数为例,类似于以下代码public class Star{ /.原创 2020-11-09 22:12:32 · 667 阅读 · 0 评论 -
用NOSql给高并发系统加速
随着互联网大潮的到来,越来越多网站,应用系统需要海量数据的支撑,高并发、低延迟、高可用、高扩展等要求在传统的关系型数据库中已经得不到满足,或者说关系型数据库应对这些需求已经显得力不从心了。关系型数据库经过几十年的发展已经很成熟,强大的sql语句支持,完美的ACID属性的支持,使得关系型数据库广泛应用于各种各样的应用系统中,但是应用的场景广泛并非意味着完美由于关系型数据库是按行进行存储的,在某些...原创 2020-02-29 20:14:12 · 1694 阅读 · 0 评论 -
你的系统是否需要分库分表,看这一篇就够了!!
是否需要分说到数据库分库分表,不能一味的追求,我们要明白为什么要进行分库分表才是最终目的。现在网上一些人鼓吹分库分表如何应对了多大数据,却不知针对很多人的业务来说,分库分表策略也许并非是银弹,而是令人焦虑的焦油坑。分库分表是业务发展到一定阶段,数据积累到一定量级而衍生出来的解决方案。当DB的数据量级到达一个阶段,写入和读取的速度会出现瓶颈,即使是有索引,索引也会变的很大,而且数据库的物理文件大...原创 2019-12-30 21:44:02 · 4261 阅读 · 0 评论 -
高并发下如何缩短响应时间
缩短一个网站响应时间真的很简单吗?定义网站响应时间是指系统对请求作出响应的时间。通俗来讲就是我们把网址输入进浏览器然后敲回车键开始一直到浏览器把网站的内容呈现给用户的这段时间。网站响应时间是越短越好,因为网站页面打开速度越快,就意味着我们的用户可以更快的访问站点或者我们的服务器。一般我们网站的响应时间保持在100~1000ms即可。1m=1000ms,打开速度越快对用户体验度越好。据说响应...原创 2019-12-25 21:48:50 · 4356 阅读 · 0 评论 -
redis做分布式锁可能不那么简单
在计算机世界里,对于锁大家并不陌生,在现代所有的语言中几乎都提供了语言级别锁的实现,为什么我们的程序有时候会这么依赖锁呢?这个问题还是要从计算机的发展说起,随着计算机硬件的不断升级,多核cpu,多线程,多通道等技术把计算机的计算速度大幅度提升,原来同一时间只能执行一条cpu指令的时代已经过去。随着多条cpu指令可以并行执行的原因,原来不曾出现的资源竞争随着出现,在程序中的体现就是随处可见的多线程...原创 2019-12-24 22:15:03 · 4069 阅读 · 0 评论 -
什么才是真正的异步??
异步定义关于异步的定义,网上有很多不同的形式,但是归根结底中心思想是不变的。无论是在http请求调用的层面,还是在cpu内核态和用户态传输数据的层面,异步这个行为针对的是调用方:一个可以无需等待被调用方的返回值就让操作继续进行的方法在多数程序员的概念中一般是指线程处理的层面:异步是计算机多线程的异步处理。与同步处理相对,异步处理不用阻塞当前线程来等待处理完成,而是允许后续操作,直至其...原创 2019-12-10 20:45:48 · 3745 阅读 · 0 评论 -
怎么样才能提高网站的吞吐量?
吞吐量定义百科吞吐量是指对网络、设备、端口、虚电路或其他设施,单位时间内成功地传送数据的数量(以比特、字节、分组等测量)。以上的定义比较宽泛,定义到网站或者接口的吞吐量是这样的:吞吐量是指系统在单位时间内处理请求的数量。这里有一个注意点就是单位时间内,对于网站的吞吐量这个单位时间一般定义为1秒,也就是说网站在一秒之内能处理多少http(https/tcp)请求。与吞吐量对应的衡量网站性能...原创 2019-12-04 22:23:58 · 4513 阅读 · 1 评论 -
分布式高并发下Actor模型如此优秀
写在开始一般来说有两种策略用来在并发线程中进行通信:共享数据和消息传递。使用共享数据方式的并发编程面临的最大的一个问题就是数据条件竞争。处理各种锁的问题是让人十分头痛的一件事。传统多数流行的语言并发是基于多线程之间的共享内存,使用同步方法防止写争夺,Actors使用消息模型,每个Actor在同一时间处理最多一个消息,可以发送消息给其他Actor,保证了单独写原则。从而巧妙避免了多线程写争夺。和...原创 2019-12-02 21:10:31 · 2163 阅读 · 0 评论 -
高并发下架构师为什么更喜欢进程内缓存
进程内缓存是指缓存和应用程序在相同地址空间。即同一个进程内。分布式缓存是指缓存和应用程序位于不同进程的缓存,通常部署在不同服务器上。从前有个机构,机构的主人叫做 CPU,这个机构专门派仆人取一些东西然后做相应的处理。下面是这个机构日常的场景。以上故事纯属预估数据,真实数据会根据不同的硬件配置和网络环境有误差。通过以上不正经的小故事,我们可以了解到cpu取各个设备数据的大体差距。至...原创 2019-11-28 21:46:42 · 1383 阅读 · 0 评论 -
高并发下如何高性能的做限流!!
技术分析如果你比较关注现在的技术形式,就会知道微服务现在火的一塌糊涂,当然,事物都有两面性,微服务也不是解决技术,架构等问题的万能钥匙。如果服务化带来的利大于弊,菜菜还是推荐将系统服务化。随着服务化的进程的不断演化,各种概念以及技术随之而来。任何一种方案都是为了解决问题而存在。比如:熔断设计,接口幂等性设计,重试机制设计,还有今天菜菜要说的限流设计,等等这些技术几乎都充斥在每个系统中。就今天...原创 2019-11-27 21:06:21 · 2519 阅读 · 1 评论 -
高性能分布式缓存的设计原理
又是一个没有开工红包的公司!!!问题分析通过以上对话,各位是否能够猜到所有缓存穿透的原因呢?回答之前我们先来看一下缓存策略的具体代码缓存服务器IP=hash(key)%服务器数量这里还要多说一句,key的取值可以根据具体业务具体设计。比如,我想要做负载均衡,key可以为调用方的服务器IP;获取用户信息,key可以为用户ID;等等。在服务器数量不变的情况下,以上设计没有问题。但是...原创 2019-11-26 22:28:18 · 6767 阅读 · 1 评论