随笔分类 -  高并发架构系统学习

摘要:旁路缓存策略 在更新数据时不更新缓存,而是删除缓存中的数据,在读取数据时,发现缓存中没了数据之后,再从数据库中读取数据,更新到缓存中。 这是使用缓存最常见的策略,旁路缓存策略,这个策略数据以数据库中的数据为准,缓存中的数据是按需加载的。它可以分为读策略和写策略,其中读策略的步骤是: 从缓存中读取数据 阅读全文
posted @ 2020-06-27 14:50 温柔的风 阅读(608) 评论(1) 推荐(0) 编辑
摘要:使用NoSQL提升写入性能 数据库系统大多使用的是传统的机械磁盘,对于机械磁盘的访问方式有两种:一种是随机IO;另一种是顺序IO。随机IO就需要花费时间做昂贵的磁盘寻道,一般来说,它的读写效率要比顺序IO小两到三个数量级,所以我们想要提升写入的性能就要尽量减少随机IO。 以MySQL的InnoDB存 阅读全文
posted @ 2020-06-26 19:54 温柔的风 阅读(440) 评论(0) 推荐(0) 编辑
摘要:在单库单表的场景下,我们可以使用数据库的自增字段作为ID,因为这样最简单,对于开发人员来说也是透明的。但是当数据库分库分表后,使用自增字段就无法保证ID的全局唯一性了。 先说一下UUID,UUID(Universally Unique Identifier,通用唯一标识码)不依赖于任何第三方系统,所 阅读全文
posted @ 2020-06-26 16:16 温柔的风 阅读(675) 评论(0) 推荐(0) 编辑
摘要:主从读写分离 其实,大部分系统的访问模型是读多写少,读写请求量的差距可能达到几个数量级,那么这就是我们所说的主从读写分离。 主从复制的原理这里不再阐述,本人博客里有关于Mysql主从的配置文章,当然里面也介绍了原理。 做了主从复制之后,就可以在写入时只写主库,在读数据时只读从库,这样即使写请求会锁表 阅读全文
posted @ 2020-06-25 20:57 温柔的风 阅读(625) 评论(0) 推荐(0) 编辑
摘要:数据库的调用方式是先获取数据库的连接,然后依靠这条连接从数据库中查询数据,最后关闭连接释放数据库资源。这种调用方式下,每次执行SQL都需要重新建立连接,频繁地建立数据库连接耗费时间长导致了访问慢的问题。 那么为什么频繁创建连接会造成响应时间慢呢?来看一个实际的测试。 我用"tcpdump -i bo 阅读全文
posted @ 2020-06-25 19:59 温柔的风 阅读(1043) 评论(0) 推荐(0) 编辑
摘要:数据库、缓存、依赖的第三方、负载均衡、交换机带宽等等都是系统扩展时需要考虑的因素。我们要知道系统并发到了某一个量级之后,哪一个因素会成为我们的瓶颈点,从而针对性地进行扩展。 比方说,你系统的流量是每秒1000次请求,对数据库的请求量也是每秒1000次。如果流量增加10倍,虽然系统可以通过扩容正常服务 阅读全文
posted @ 2020-06-25 01:10 温柔的风 阅读(429) 评论(0) 推荐(0) 编辑
摘要:通常来讲,一个高并发大流量的系统,系统出现故障比系统性能低更损伤用户的使用体验。 可用性的度量 可用性是一个抽象的概念,你需要知道要如何来度量它,与之相关的概念是:MTBF和MTTR。 MTBF(Mean Time Between Failure)是平均故障间隔的意思,代表两次故障的间隔时间,也就是 阅读全文
posted @ 2020-06-25 00:29 温柔的风 阅读(523) 评论(0) 推荐(0) 编辑
摘要:高并发系统设计的三大目标:高性能、高可用、可扩展 高性能:反应了系统的使用体验,想象一下,同样承担每秒一万次请求的两个系统,一个响应时间是毫秒级,一个响应时间在秒级别,它们带给用户的体验肯定是不同的。 高可用:则表示系统可以正常服务用户的时间。举例,还是两个承担每秒一万次的系统,一个可以做到全年不停 阅读全文
posted @ 2020-06-24 23:47 温柔的风 阅读(1048) 评论(0) 推荐(0) 编辑
摘要:在系统从0到1的阶段,为了让系统快速上线,我们通常是不考虑分层的。但是随着业务越来越复杂,大量的代码纠缠在一起,会出现逻辑不清晰、各模块相互依赖、代码扩展性差、改动一处就牵一发而动全身等问题。 我们常见的设计方式如MVC分层、ISO七层模型、Linux系统分层、Mysql分层、PHP分层等等... 阅读全文
posted @ 2020-06-24 22:55 温柔的风 阅读(811) 评论(0) 推荐(0) 编辑
摘要:高并发代表着大流量,高并发系统设计的魅力就在于我们能够凭借自己的聪明才智设计巧妙的方案,从而抵抗巨大流量的冲击,带给用户更好的使用体验。这些方案好似能操纵流量,让流量更加平稳得被系统中的服务和组件处理。 而我们在应对高并发大流量时归纳起来共有三种方法。 Scale-out(横向扩展):分而治之是一种 阅读全文
posted @ 2020-06-24 20:25 温柔的风 阅读(924) 评论(0) 推荐(2) 编辑
摘要:布隆过滤器的算法,用来判断一个元素是否在一个集合中。这种算法由一个二进制数组和一个Hash算法组成。 它的基本思路如下: 把集合中的每一个值按照提供的Hash算法算出对应的Hash值,然后将Hash值对数组长度取模后得到需要计入数组的索引值,并且将数组这个位置的值从0改成1。在判断一个元素是否存在于 阅读全文
posted @ 2018-09-30 13:52 温柔的风 阅读(291) 评论(0) 推荐(0) 编辑