架构师学习笔记
文章平均质量分 83
一篇一个案例小故事,将复杂的书本知识,简化为简单的故事
喵叔哟
一个关注AI和Java的.NET程序员
展开
-
存储优化--分区与冷热分离
本文是专题的第一篇文章,主要讲解优化数据存储,涉及到锁、批处理、重试机制以及数据一致性等问题。下面 我们就开始吧。一、案例有一个客服工单系统,会从邮件服务器中获取客服邮箱收到的邮件,并且将这些邮件自动生成工单并自动分配给相应的客服组,每次客服人员从工单列表中选取一个工单进行处理,每处理一次就会产生一个工单处理记录,直到工单被客服关闭为止。该系统已经运行了一年,在这一年中一共产生了一千万个工单和五千万条工单处理记录。因为所有工单和处理记录都存储在一个数据库中,因此每次客服查看工单列表时会很慢,但是客服还原创 2022-05-21 20:37:31 · 1449 阅读 · 0 评论 -
存储优化--查询分离
上一篇文章中我们讲解了利用数据库分区与冷热分离的方式来优化存储,虽然解决了查询速度慢的问题,但是在海量数据情况下依然会出现查询缓慢问题,并且部分系统中的冷热数据也是需要频繁或同时查询的。那么,这篇文章中我将带领大家来学习一下如何在设计系统架构时解决海量的数据存储与查询。Tip:目前任何一个与数据有关的系统,甚至互联网系统都有极大的可能出现海量的数据存储。一、案例我们有一个自动化舆情系统,简要的工作流程是这样的:每天数据采集服务会从公共社交媒体上采集数据并存入数据库,识别服务读取数据库中存储的数据按原创 2022-05-28 02:48:36 · 336 阅读 · 0 评论 -
进一步优化--分库分表
上一篇文章中我们说到查询分离对于舆情系统来说不是很好的解决方案,这是因为查询分离虽然解决了复杂查询和查询导致的写入缓慢问题,但是如果主存储数据量越来越大时,写操作也会变的很慢,因此我们就需要引入分库分表方案。接上篇文章,舆情系统已经运行了三年,接入的社交平台也是越来越多,每天新增的数据量已经超过5000万,虽然查询数据的速度加快了,但是写入数据的速度越来越慢。经过开发组商讨,打算采用分库分表方案来解决这个问题。大致思路如下:所谓分库分表可以分为两部分来讲:分表和分库。选择分库分表的原因是,这个方案对第三方的原创 2022-06-01 18:45:30 · 234 阅读 · 0 评论 -
缓存读写--读
从这篇文章开始,我们将学习缓存在架构中如何使用,主要解决数据库读取频繁的问题。现在我们有一个电商系统,系统同每个商品都有详情页,详情页内容包含:图片、价格、详情、评价、优惠活动、类似商品以及近期交易情况等。一个页面需要执行十几条sql语句,如果详情页后期再增加别的内容的话,需要执行的sql语句有可能多大几十条,那么这时详情页就会打开的很慢。为了解决这个问题我们首先想到的是将数据存储到本地缓存中,商品Id作为key,详情作为value,用户获取商品详情时,根据id从本地缓存中取。但是这里有个问题,服务器的本原创 2022-06-04 16:07:17 · 252 阅读 · 1 评论 -
缓存读写--写
在上一篇文章中我们讨论了缓存架构方案,使用这个架构方案可以减轻读数据库的压力,但是这个方案在大量并发写操作的情况下会造成数据库性能降低。那么这篇文章我将讲解一下如何处理大量并发写的问题。在一个电商系统中,我们要增加一个预约功能,用户可以在指定的时间段内对商品进行购买预约。预约功能和其他功能不一样的地方是,预约功能会出现短时间内大量并发写的情况,很有可能造成数据库和服务器崩溃,对于服务器来说我们可以增加服务器数量,但是对于数据库来说简单的增加数据库数量是不够的。一定有人会说使用分表分库啊,这个方案确实不错,但原创 2022-06-12 14:44:48 · 330 阅读 · 0 评论 -
缓存读写--技术选型
上一篇文章我们解决写操作对数据库的压力,但是如果是长期频繁插入数据,那么这个方案并不能解决这个问题。这篇文章将会解决这个问题。A公司有一个面向全国的大型社区团购APP,日访问量在80万以上,用户下单量16万单以上,运营中心需要根据用户在页面上的停留时间、用户所在位置来进行数据分析,以便调整不同商品的营销策略,并且还需要查看不同商品每天的点击人数、点击人次和下单人数。这是一个看似很简单的需求,貌似就只是设置一个埋点,记录一下用户在商品详情页停留时长、用户当前所在位置以及在商品详情页的操作信息,但是对于一个日原创 2022-06-19 17:39:30 · 314 阅读 · 1 评论 -
缓存综合项目--秒杀架构
前面几篇文章我们学习了读缓存、写缓存和数据收集的场景,在这篇文章中我们将综合这三个方面来实现一个秒杀架构。秒杀架构的特点是 僧多粥少,一般来说商品会在两秒内被抢光,后续进来的用户只能看到秒杀结束的界面,因此秒杀开始的前两秒中会出现一个流量峰值。并且秒杀架构设计时要保证商品不能被超卖、下单数据不能丢失、服务器与数据库不能崩溃、尽最大可能屏蔽机器人抢走商品。下面针对这四个方面我们来讲解一下。秒杀架构就是一个不断过滤请求的过程,一般来说秒杀系统分为5层:静态资源/负载均衡、网关、后台服务器、缓存和数据库。我们尽原创 2022-06-26 18:05:10 · 743 阅读 · 0 评论 -
微服务--开篇
从这篇文章开始我们就进入到了微服务的世界,在后续的几篇文章中我们将学习一些微服务组件的原理,以此来达到理解微服务架构的本质。有一个大型商城系统,由不同开发语言设计的100多个服务组成,大部分服务之间存在调用关系,如果要将这些服务的部署改为微服务部署,几乎很难使用统一的微服务框架实现。因此使用了Nginx对这些服务进行管理,先通过本地配置文件获取要调用服务的地址,再通过代码将地址组装成URL,之后服务间的调用都通过Nginx代理。案例中所说的架构方式是传统的架构方式,它存在四方面的问题。系统每次部署、增加服务原创 2022-07-03 19:06:10 · 617 阅读 · 0 评论 -
微服务--全链路日志
某系统刚从传统部署方式转换到微服务,迁移后发现原本将日志打印在到文件中,然后使用ELK进行日志收集和分析的方式无法在微服务中使用。这种方式相对来说比较随意,没有统一的规范,因此在线上系统出现异常时,要排查出具体问题的话是一个很困难的事情。基于这个问题,我们需要把日志规范化,要实现规范化就要从如下五个需求入手:进行记录选型时我们要遵循如下5个原则:下面分别讲解以下这五个原则。日志一般我们都是独立记录的,然后通过线程ID将这些日志关联起来,因此我们需要一个可以将同一个请求的所有日志都连接在一起的数据结构,目前较原创 2022-07-10 14:59:30 · 1116 阅读 · 0 评论 -
微服务--熔断
这篇文章只是简单的讲解了以下熔断和限流,就提用的技术没有讲解。后续文章我将利用本章所讲的内容带领大家进行技术选型和原理讲解。某系统中存在一个用户服务,大部分页面都需要用到它,这个服务包含两个接口用户状态接口和用户权限接口。要解决上一小节提到的两个问题我们需要引入新的技术,引入的技术需要满足两个条件线程隔离和熔断机制。...原创 2022-07-17 16:58:36 · 792 阅读 · 0 评论 -
微服务--限流
本问主要讲解了限流的几种算法、注意事项和要考虑的问题。原创 2022-09-04 19:15:42 · 856 阅读 · 0 评论 -
微服务--数据一致性
本篇文章讲解微服务数据一致性相关的知识。原创 2022-09-12 15:44:43 · 1544 阅读 · 0 评论 -
微服务--数据同步
本篇文章简要介绍了微服务中数据同步的方案,在实际开发中具体使用哪种方案,视情况而定。原创 2022-09-18 19:08:46 · 1488 阅读 · 0 评论