自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

架构师修行之路

架构师修行之路

  • 博客(45)
  • 收藏
  • 关注

原创 你的面向接口编程一定对吗?

妹子开始抱怨起来业务背景妹子的游戏是个对战类的游戏,其中有一个玩家的概念,玩家可以攻击,这个业务正是妹子开始挠头的起点第一次需求产品经理:玩家有很多属性,例如:身高,性别 blalalala ,玩家可以攻击其他玩家。YY妹子写程序也是很利索,一天就把程序搞定了,而且还抽象出一个palyer的基类出来,堪称高级程序员必备技能。 //玩家的基础抽象类 abstract class Player { public string Name { get; set;..

2020-11-18 20:13:29 1065

原创 数据库快速迁移10亿级数据

问题分析经过几分钟的排查,数据库情况如下:数据库采用Sqlserver 2008 R2,单表数据量21亿。无水平或者垂直切分,但是采用了分区表。分区表策略是按时间降序分的区,将近30个分区。正因为分区表的原因,系统才保证了在性能不是太差的情况下坚持至今。此表除聚集索引之外,无其他索引,无主键(主键其实是利用索引来快速查重的)。所以在频繁插入新数据的情况下,索引调整所耗费的性能比较低。至于聚集索引和非聚集索引等知识,请各位移步google或者百度。至于业务,不是太复杂。经过相关人.

2020-11-18 20:04:32 1779 1

原创 进击谷歌:多线程下程序顺序怎么稳定不乱?

题目比如我们有三个方法,类似以下代码 static void Methond1() { Console.WriteLine($"{Thread.CurrentThread.Name} 执行 第一个方法=="); } static void Methond2() { Console.WriteLine($"{Thread.CurrentThread.Name} 执行 第二个方法=======".

2020-11-17 21:55:23 1084

原创 数据库的乐观锁和悲观锁并非真实的锁

开局我们平时编写程序的时候,有很多情况下需要考虑线程安全问题,一个全局的变量如果有可能会被多个同时执行的线程去修改,那么对于这个变量的修改就需要有一种机制去保证值的正确性和一致性,这种机制普遍的做法就是加锁。其实也很好理解,和现实中一样,多个人同时修改一个东西,必须有一种机制来把多个人进行排队。计算机的世界中也是如此,多个线程乃至多个进程同时修改一个变量,必须要对这些线程或者进程进行排队。数据库的世界亦是如此,多个请求同时修改同一条数据记录,数据库必须需要一种机制去把多个请求来顺序化,或者理解为同一条数据

2020-11-11 22:09:34 2567

原创 你为什么还在用存储过程?

存储过程存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。优势可以减少程序在调用DB时候的信息传输量(其实减少的只有Request的时候)存储过程是预先优化和预编译的,节省每次运行编译的时间,所以一般情况下认为存储过程的性能是优于sql语句的。对调用者可以隐藏数据库的复杂性,将数据组装的过程封装。

2020-11-11 22:02:53 1475

原创 我眼中的单例模式并不完美

/// <summary> /// 全局唯一的配置信息 /// </summary> public class Config { private static Config _config = null; public static Config GetConfig() { if (_config == null) { _co.

2020-11-10 21:56:24 965

原创 假如需要一百万个对象

设计背景每个平台都会有用户这种基础数据的设计,作为最基础的用户,每个用户都有很多属性,比如性别,姓名,手机号等,每个用户还可以有类似经验值这样的荣誉系统,根据不同的经验值来对应不同的等级,不同的等级对应不同的荣誉UI,比如一级用户可能只显示一个星星,二级用户显示两颗星星,以此类推,类似于QQ等级的星星月亮太阳,这样的荣誉系统随着平台的不断壮大,可能会衍生出很多类型。那么问题来了,用户登录的时候就需要初始化用户的这些荣誉值,以星星数为例,类似于以下代码public class Star{ /.

2020-11-09 22:12:32 667

原创 对于程序员,那些既陌生又熟悉的计算机硬件

程序员一步入中年,不知不觉便会被铺天盖地的“危机感”上身,曾经的那个少年已经不在,时间就是这样公平。就算你能发明c语言,随着时间的推移,你注定还是要成为慢慢变蔫的茄子,缓缓变黑的葡萄。看着乐视退市的消息,周末我赶紧拉着儿子的小手,复习起了大学那曾经考试”满分“的计算机基础,你别说,只读了一小部分我就发现一个事实,记忆力果然指数级下降,儿子一遍就可以熟记,我却衰退的就像没上过大学。原来程序员写的程序实际上就是一个由0和1组成的位序列,或者说是比特序列,8个比特(bit)被分为一组,称为字节。系统中所有的

2020-11-09 22:03:08 1113

原创 架构师必备的那些分布式事务解决方案!!

为了保证分布式环境下数据强一致性,需要引入分布式事务,而分布式事务由于网络环境的不确定性,天生就很难实现。具体可以见上一篇。分布式下,我想要强一致性为了保证分布式事务的正确性,目前互联网领域有几种流行的解决方案,但是大部分都没有像XA事务一样形成标准的工业规范。但是这些方案在某些特定的行业或者业务场景下却得到了越来越多的开发者的认可。避免分布式事务此方案提倡尽量避免分布式事务,不仅仅是因...

2020-08-06 18:21:00 28

原创 程序员修神之路--简约而不简单的分布式通信基石

分布式系统可以总结为是处于不同物理位置的多个进程组成的整体,为了确保这个整体有效并且高效的对外提供服务,每个节点之间都有可能需要进行通信来交换信息,而这个交换信息的过程多数使用的是tcp协议。tcp协议是位于ip层之上的传输层协议,在这个传输层里有两个比较重要的协议:tcp和udp。对于应用层的开发人员来说,用的最多的就是这两个协议,这也是一些面试官必问的知识点之一无论是tcp还是udp,都...

2020-07-21 21:49:00 21

原创 程序员修神之路--分布式系统设计理念这么难学?

分布式系统身为二十一世纪的一名程序员,没听说过分布式系统就显得自己好像没有女票一样尴尬。无论是出去面试跟面试官吹水,还是在工作中和同事吹水,分布式系统永远是你显得高人一等的筹码。分布式系统已经诞生了好几十年,说起来比我们八零后程序员好要老成,随着现代互联网的崛起,对于系统在性能,可靠性上的要求大大提高。分布式系统的定义其实很简单,也很抽象:任何由处于不同物理位置的多个进程提供相同服务的系统都...

2020-07-12 22:24:00 17

原创 程序员羽化之路--我眼中的单例模式并不完美

/// <summary> /// 全局唯一的配置信息 /// </summary> public class Config { private static Config _config = null; public static Config GetConfig() { ...

2020-07-08 12:25:00 27

原创 程序员过关斩将--分布式系统消息异常该何去何从

异步处理模型一旦谈到分布式,微服务等这些具有很高逼格的代名词,总能让你在面试中脱颖而出,不是因为这些词的英文翻译的好,而是现代互联网乃至企业级开发确实在分布式,微服务等模式下取得了良好的架构效果。无论是微服务,还是之前的SOA,总是离不开异步处理模型,小到程序中IO的处理,大到系统间的消息交互,处处都有异步的身影。谈到系统之间的消息异步处理,就不能不谈消息队列(MQ),目前业界比较流行的M...

2020-06-24 09:18:00 18

原创 程序员过关斩将--作为一个架构师,我是不是应该有很多职责?

每一个程序员都有一个架构梦。上面其实本质上是一句富有事实哲理的废话,要不然也不会有这么多人关注你的公众号。这些年随着“企业数字化”转型的口号,一大批企业奔跑在转型的路上,希望领先一步对手将企业IT部门从单纯的成本中心转变为业务驱动者,而这个过程中,企业的架构师起着举足轻重的作用。架构师的工作在很多撸码的开发者眼中是很一项很神圣的工作,而且富有挑战性。但是事物都有两面性,很多管理者和技术人...

2020-06-11 10:51:00 19

原创 程序员过关斩将--为微服务撸一个简约而不简单的配置中心

毫不犹豫的说,现代高速发展的互联网造就了一批又一批的网络红人,这一批批网红又极大的催生了特定平台的一大波流量,但是留给了程序员却是一地鸡毛,无论是运维还是开发,每天都会担心服务器崩溃,程序down机。还是怀念以前那些单机结构呀,甚至有点嫉妒那些做内网几乎没有访问量的应用的程序员,不用加班,不用提心吊胆,更不用每年买霸王洗发露。提到单机架构,在互联网应用中肯定是吃不开的,流量高峰冲击的你可以怀疑...

2020-05-27 09:47:00 16

原创 程序员羽化之路--假如需要一百万个对象

设计背景每个平台都会有用户这种基础数据的设计,作为最基础的用户,每个用户都有很多属性,比如性别,姓名,手机号等,每个用户还可以有类似经验值这样的荣誉系统,根据不同的经验值来对应不同的等级,不同的等级对应不同的荣誉UI,比如一级用户可能只显示一个星星,二级用户显示两颗星星,以此类推,类似于QQ等级的星星月亮太阳,这样的荣誉系统随着平台的不断壮大,可能会衍生出很多类型。那么问题来了,用户登录的时...

2020-03-23 09:00:00 17

原创 程序员过关斩将-- 喷一喷坑爹的面向UI编程

摒弃面向UI编程为何喷起此次话题,因为前不久和我们首席架构师沟通,谈起程序设计问题,一不小心把UI扯进来,更把那些按照UI来编程的后台工程师也扯了进来。今天特意百度了一下(其实程序员应该去google一下,奈何需要FQ),确实没有面向UI编程这个概念在市面上流传,大家可以当我是首创吧。需要声明一点,这里喷的是服务器开发人员哦!!我是一个极具打抱不平的人,浪迹编程十几年,见过太多的程序员因为...

2020-03-16 09:10:00 18

原创 程序员过关斩将--从每秒6000写请求谈起

背景每一个片子的幕后,都保留了你的观看记录,详细的记着你观看了几次,跳过了那些时长 ,据说根据这些数据可以分析出你喜欢哪个日本明星,以此来做定向推送......虽然看起来很简单的一个功能,其实涉及到的数据量非常大,极限情况下为你的用户数*视频数的乘积。那么在只有两个网站服务器,一台sqlserver的情况下,该如何面对这样不算大数据量的写请求呢?为什么说是写请求呢?因为用户观看视频的每一...

2020-03-09 08:28:00 16

原创 用NOSql给高并发系统加速

随着互联网大潮的到来,越来越多网站,应用系统需要海量数据的支撑,高并发、低延迟、高可用、高扩展等要求在传统的关系型数据库中已经得不到满足,或者说关系型数据库应对这些需求已经显得力不从心了。关系型数据库经过几十年的发展已经很成熟,强大的sql语句支持,完美的ACID属性的支持,使得关系型数据库广泛应用于各种各样的应用系统中,但是应用的场景广泛并非意味着完美由于关系型数据库是按行进行存储的,在某些...

2020-02-29 20:14:12 1692

原创 程序员过关斩将--redis做消息队列,香吗?

Redis消息队列在程序员这个圈子打拼了太多年,见过太多的程序员使用redis,其中一部分喜欢把redis做缓存(cache)使用,其中最典型的当属存储用户session,除此之外,把redis作为消息队列使用也不在少数,可见redis在互联网中应用是多么的广泛。redis作为消息队列使用,redis支持的数据结构是可以支撑这类业务,主要是利用了list这种数据结构的特性。Redis的列表相...

2020-02-17 19:01:00 17

原创 程序员过关斩将--自定义线程池来实现文档转码

背景 我司在很久之前,一位很久之前的同事写过一个文档转图片的服务,具体业务如下: 用户在客户端上传文档,可以是ppt,word,pdf 等格式,用户上传完成可以在客户端预览上传的文档,预览的时候采用的是图片形式(不要和我说用别的方式预览,现在已经来不及了) 当用户把文档上传到云端之后(阿里云),把文档相关的信息记录在数据库,然后等待转码完成 服务器有一个转码服务(其实就是一个windows s...

2020-01-11 08:49:00 25

原创 你的系统是否需要分库分表,看这一篇就够了!!

是否需要分说到数据库分库分表,不能一味的追求,我们要明白为什么要进行分库分表才是最终目的。现在网上一些人鼓吹分库分表如何应对了多大数据,却不知针对很多人的业务来说,分库分表策略也许并非是银弹,而是令人焦虑的焦油坑。分库分表是业务发展到一定阶段,数据积累到一定量级而衍生出来的解决方案。当DB的数据量级到达一个阶段,写入和读取的速度会出现瓶颈,即使是有索引,索引也会变的很大,而且数据库的物理文件大...

2019-12-30 21:44:02 4257

原创 高并发下如何缩短响应时间

缩短一个网站响应时间真的很简单吗?定义网站响应时间是指系统对请求作出响应的时间。通俗来讲就是我们把网址输入进浏览器然后敲回车键开始一直到浏览器把网站的内容呈现给用户的这段时间。网站响应时间是越短越好,因为网站页面打开速度越快,就意味着我们的用户可以更快的访问站点或者我们的服务器。一般我们网站的响应时间保持在100~1000ms即可。1m=1000ms,打开速度越快对用户体验度越好。据说响应...

2019-12-25 21:48:50 4351

原创 redis做分布式锁可能不那么简单

在计算机世界里,对于锁大家并不陌生,在现代所有的语言中几乎都提供了语言级别锁的实现,为什么我们的程序有时候会这么依赖锁呢?这个问题还是要从计算机的发展说起,随着计算机硬件的不断升级,多核cpu,多线程,多通道等技术把计算机的计算速度大幅度提升,原来同一时间只能执行一条cpu指令的时代已经过去。随着多条cpu指令可以并行执行的原因,原来不曾出现的资源竞争随着出现,在程序中的体现就是随处可见的多线程...

2019-12-24 22:15:03 4068

原创 什么才是真正的异步??

异步定义关于异步的定义,网上有很多不同的形式,但是归根结底中心思想是不变的。无论是在http请求调用的层面,还是在cpu内核态和用户态传输数据的层面,异步这个行为针对的是调用方:一个可以无需等待被调用方的返回值就让操作继续进行的方法在多数程序员的概念中一般是指线程处理的层面:异步是计算机多线程的异步处理。与同步处理相对,异步处理不用阻塞当前线程来等待处理完成,而是允许后续操作,直至其...

2019-12-10 20:45:48 3739

原创 程序员修神之路--打通Docker镜像发布容器运行流程

菜菜哥,我看了一下docker相关的内容,但是还是有点迷糊还有哪不明白呢?如果我想用docker实现所谓的云原生,我的项目该怎么发布呢?这还是要详细介绍一下docker了Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现...

2019-12-09 21:00:00 23

原创 怎么样才能提高网站的吞吐量?

吞吐量定义百科吞吐量是指对网络、设备、端口、虚电路或其他设施,单位时间内成功地传送数据的数量(以比特、字节、分组等测量)。以上的定义比较宽泛,定义到网站或者接口的吞吐量是这样的:吞吐量是指系统在单位时间内处理请求的数量。这里有一个注意点就是单位时间内,对于网站的吞吐量这个单位时间一般定义为1秒,也就是说网站在一秒之内能处理多少http(https/tcp)请求。与吞吐量对应的衡量网站性能...

2019-12-04 22:23:58 4510 1

原创 分布式高并发下Actor模型如此优秀

写在开始一般来说有两种策略用来在并发线程中进行通信:共享数据和消息传递。使用共享数据方式的并发编程面临的最大的一个问题就是数据条件竞争。处理各种锁的问题是让人十分头痛的一件事。传统多数流行的语言并发是基于多线程之间的共享内存,使用同步方法防止写争夺,Actors使用消息模型,每个Actor在同一时间处理最多一个消息,可以发送消息给其他Actor,保证了单独写原则。从而巧妙避免了多线程写争夺。和...

2019-12-02 21:10:31 2162

原创 程序员修神之路--容器技术为什么会这么流行

菜菜哥,你上次讲的kubernetes我研究了一下,你再给我讲讲docker呗docker可很流行呀kubernetes是容器编排技术,容器不就是指的docker吗?docker可不等于容器哦,docker只算是容器的一种吧,算了容器的典型代表容器的诞生在传统的软件部署方式中,程序员需要把要发布的应用程序打成包发给运维人员,然后由运维人员在生产环境进行部署。当随着应用的版本迭代越来越多,应用的依...

2019-12-02 09:53:00 15

原创 高并发下架构师为什么更喜欢进程内缓存

进程内缓存是指缓存和应用程序在相同地址空间。即同一个进程内。分布式缓存是指缓存和应用程序位于不同进程的缓存,通常部署在不同服务器上。从前有个机构,机构的主人叫做 CPU,这个机构专门派仆人取一些东西然后做相应的处理。下面是这个机构日常的场景。以上故事纯属预估数据,真实数据会根据不同的硬件配置和网络环境有误差。通过以上不正经的小故事,我们可以了解到cpu取各个设备数据的大体差距。至...

2019-11-28 21:46:42 1383

原创 高并发下如何高性能的做限流!!

技术分析如果你比较关注现在的技术形式,就会知道微服务现在火的一塌糊涂,当然,事物都有两面性,微服务也不是解决技术,架构等问题的万能钥匙。如果服务化带来的利大于弊,菜菜还是推荐将系统服务化。随着服务化的进程的不断演化,各种概念以及技术随之而来。任何一种方案都是为了解决问题而存在。比如:熔断设计,接口幂等性设计,重试机制设计,还有今天菜菜要说的限流设计,等等这些技术几乎都充斥在每个系统中。就今天...

2019-11-27 21:06:21 2519 1

原创 高性能分布式缓存的设计原理

又是一个没有开工红包的公司!!!问题分析通过以上对话,各位是否能够猜到所有缓存穿透的原因呢?回答之前我们先来看一下缓存策略的具体代码缓存服务器IP=hash(key)%服务器数量这里还要多说一句,key的取值可以根据具体业务具体设计。比如,我想要做负载均衡,key可以为调用方的服务器IP;获取用户信息,key可以为用户ID;等等。在服务器数量不变的情况下,以上设计没有问题。但是...

2019-11-26 22:28:18 6764 1

原创 程序员修神之路--要想做好微服务架构,并非易事!

菜菜哥,上次听你讲了微服务和SOA,明白了很多道理看来面试用上了吧呵呵,但是面试官问我微服务有什么优点和缺点...看来还得给你详细讲一讲微服务概念微服务(Microservices Architecture)是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个微服...

2019-11-11 22:02:00 17

原创 程序员修神之路--为什么有了SOA,我们还用微服务?

菜菜哥,我最近需要做一个项目,老大让我用微服务的方式来做那挺好呀,微服务现在的确很流行我以前在别的公司都是以SOA的方式,SOA也是面向服务的方式呀的确,微服务和SOA有相同之处面向服务的架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。...

2019-10-28 16:04:00 10

转载 不得不说的Nginx反向代理策略算法!!

this wonderful lifeJackTian,公众号【杰哥的IT之旅】作者,其主要分享文章包含:Linux、Shell、云计算、数据库、运维、架构、实用工具、面...

2019-09-17 07:30:00 1035

原创 程序员修神之路--用NOSql给高并发系统加速(送书)

随着互联网大潮的到来,越来越多网站,应用系统需要海量数据的支撑,高并发、低延迟、高可用、高扩展等要求在传统的关系型数据库中已经得不到满足,或者说关系型数据库应对这些需求已经显得力不从心了。关系型数据库经过几十年的发展已经很成熟,强大的sql语句支持,完美的ACID属性的支持,使得关系型数据库广泛应用于各种各样的应用系统中,但是应用的场景广泛并非意味着完美。- 由于关系型数据库是按行进行存储的,在...

2019-08-13 09:22:00 16

原创 程序员修神之路--做好分库分表其实很难之二(继续送书)

菜菜哥,上次听你给我讲了分库的情况后,我明白了很多,能再给我讲讲分表吗有收获就好,分表其实有很多情况和分库类似还有不一样的情况吗?有呀,本来数据库和表是不同层面的东西,肯定有差异那你给讲讲呗讲可以,一杯coffee如何?为什么分在正式开始之前,菜菜还是要强调一点,你的数据表是否应该分,需要综合考虑很多因素,比如业务的数据量是否到达了必须要切分的数量级,是否可以有其他方案来解决当前问题?我不止一次...

2019-07-22 09:17:00 11

原创 程序员过关斩将--为什么不推荐业务中使用存储过程?

菜菜哥,我新接手了一个项目,看的我头疼呀业务有这么复杂呀?不是的,这个老项目完全是用存储过程写的,每个存储过程都好几百行这样呀,是够头疼的~有没有办法帮我了解业务一下?碰到这样的情况,我真帮不了你了,你可以多埋怨几句做的那个人~~~存储过程存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储...

2019-06-13 17:51:00 19

原创 程序猿修仙之路--算法之直接插入排序

算法主要衡量标准时间复杂度(运行时间)在算法时间复杂度维度,我们主要对比较和交换的次数做对比,其他不交换元素的算法,主要会以访问数组的次数的维度做对比。其实有很多同学对于算法的时间复杂度有点模糊,分不清什么所谓的 O(n),O(nlogn),O(logn)…等,也许下图对一些人有一些更直观的认识。空间复杂度(额外的内存使用)排序算法的额外内存开销和运行时间同等...

2019-04-12 09:27:22 1311

原创 程序猿修仙之路--算法之选择排序

算法主要衡量标准时间复杂度(运行时间)在算法时间复杂度维度,我们主要对比较和交换的次数做对比,其他不交换元素的算法,主要会以访问数组的次数的维度做对比。其实有很多同学对于算法的时间复杂度有点模糊,分不清什么所谓的 O(n),O(nlogn),O(logn)…等,也许下图对一些人有一些更直观的认识。空间复杂度(额外的内存使用)排序算法的额外内存开销和运行时间同等...

2019-04-02 17:44:31 1325

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除