随笔分类 - 分布式
摘要:消息队列,顾名思义,就是传递消息的队列 消息队列有哪些应用 系统解耦 设计模式中有一个开闭原则,指的是软件实体应该对扩展开放、对修改关闭,尽量保持系统之间的独立,这里面蕴含的是解耦思想。而消息队列的使用,可以认为是在系统中隐含地加入了一个对外的扩展接口,能够方便地对业务进行解耦,调用方只需要发送消息
阅读全文
摘要:ElasticSearch 是一个基于 Lucene 的分布式全文检索框架,在 Lucene 类库的基础上实现,可以避免直接基于 Lucene 开发,这一点和 Java 中 Netty 对 IO/NIO 的封装有些类似。 ElasticSearch 开放了一系列的 RESTful API,基于这些
阅读全文
摘要:现在要设计电商网站的订单数据库模块,经过对业务增长的估算,预估三年后,数据规模可能达到 6000 万,每日订单数会超过 10 万。 存储实现,订单作为电商业务的核心数据,应该尽量避免数据丢失,并且对数据一致性有强要求,肯定是选择支持事务的关系型数据库,比如使用 MySQL 及 InnoDB 存储引擎
阅读全文
摘要:单表行数超过 500 万行或者单表容量超过 2GB,才推荐进行分库分表。 要避免过度设计。因为分库分表虽然可以提高性能,但是盲目地进行分库分表只会增加系统的复杂度。 数据库连接限制 数据库的连接是有限制的,不能无限制创建,比如 MySQL 中可以使用 max_connections 查看默认的最大连
阅读全文
摘要:互联网大部分业务场景都是读多写少的,对于电商等典型业务,读和写的请求对比可能差了不止一个数量级。为了不让数据库的读成为业务瓶颈,同时也为了保证写库的成功率,一般会采用读写分离的技术来保证。 读写分离的实现是把访问的压力从主库转移到从库,特别在单机数据库无法支撑并发读写,并且业务请求大部分为读操作的情
阅读全文
摘要:Sidecar 设计模式 在系统设计时,边车模式通过给应用程序添加边车的方式来拓展应用程序现有的功能,分离通用的业务逻辑,比如日志记录、流量控制、服务注册和发现、限流熔断等功能。通过添加边车实现,微服务只需要专注实现业务逻辑即可,实现了控制和逻辑的分离与解耦。 边车模式中的边车,实际上就是一个 Ag
阅读全文
摘要:容器化技术简介 相比传统虚拟化技术,容器技术是一种更加轻量级的操作系统隔离方案,可以将应用程序及其运行依赖环境打包到镜像中,通过容器引擎进行调度,并且提供进程隔离和资源限制的运行环境。 虚拟化技术 虚拟化技术通过 Hypervisor 实现虚拟机与底层硬件的解耦,是一种运行在基础物理服务器和操作系统
阅读全文
摘要:一部分配置会经常发生修改,比如限流降级开关配置、业务中的白名单配置等。这些配置项除了变更频繁,还要求实时性,如果采取和应用一起发布的方式,那么每次变更都要重新发布服务,非常不方便。 配置管理如何实现 分布式配置管理的本质就是一种推送-订阅模式的运用。配置的应用方是订阅者,配置管理服务则是推送方,客户
阅读全文
摘要:随着服务的拆分,系统的模块变得越来越多,不同的模块可能由不同的团队维护,一个请求可能会涉及几十个服务的协同处理, 牵扯到多个团队的业务系统。 假设现在某次服务调用失败,或者出现请求超时,需要定位具体是哪个服务引起的异常,哪个环节导致的超时,就需要去每个服务里查看日志,这样的处理效率是非常低的。 系统
阅读全文
摘要:为什么需要服务注册和发现 分布式系统下微服务架构的一个重要特性就是可以快速上线或下线,从而可以让服务进行水平扩展,以保证服务的可用性。 假设有一个电商会员服务,随着业务发展,服务器负载越来越高,需要新增服务器。如果没有服务注册与发现,就要把新的服务器地址配置到所有依赖会员模块的服务,并相继重启它们,
阅读全文
摘要:开放平台类网关是企业内部系统对外的统一入口,承担了很多业务,比如内外部数据交互、数据安全、监控统计等功能。 为什么需要网关 移动互联网时代,我们的系统不仅会通过 Web 端提供服务,还有 App 端、小程序端等,各个调用端单独去发起连接,会出现很多问题,比如不容易监控调用流量,出现问题不好确定来源,
阅读全文
摘要:RPC(Remote Procedure Call)是一种进程间通信方式,通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议”。 RPC 允许程序调用另一个地址空间的过程或函数,而不用程序员显式编码这个远程调用的细节。 RPC 框架代表 Dubbo、Thrift、gRPC RPC 框
阅读全文
摘要:完备的分布式锁,需要支持哪些特性? 互斥性,互斥是锁的基本特征,同一时刻只能有一个线程持有锁,执行临界操作;超时释放,超时释放是锁的另一个必备特性,可以对比 MySQL InnoDB 引擎中的 innodb_lock_wait_timeout 配置,通过超时释放,防止不必要的线程等待和资源浪费;可重
阅读全文
摘要:大促活动有一个共同特点就是访问量激增,在高并发下会出现成千上万人抢购一个商品的场景。虽然在系统设计时会通过限流、异步、排队等方式优化,但整体的并发还是平时的数倍以上,参加活动的商品一般都是限量库存,如何防止库存超卖,避免并发问题呢?分布式锁就是一个解决方案。 分布式锁的常用实现 基于数据库、Redi
阅读全文
摘要:如果 MySQL 数据库断电了,未提交的事务怎么办? 答案是依靠日志,因为在执行一个操作之前,数据库会首先把这个操作的内容写入到文件系统日志里记录起来,然后再进行操作。当宕机或者断电的时候,即使操作并没有执行完,但是日志在操作前就已经写好了,我们仍然可以根据日志的内容来进行恢复。 MySQL Inn
阅读全文
摘要:分布式事务就是一个业务操作,是由多个细分操作完成的,而这些细分操作又分布在不同的服务器上;事务,就是这些操作要么全部成功执行,要么全部不执行。 数据库事务 原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durabilily),简称 ACID。
阅读全文
摘要:区块链是一个注重安全和可信度胜过效率的一项技术,如果说互联网技术解决的是通讯问题,区块链技术解决的则是信任问题。 Consistency 侧重的是内容在时间顺序上的一致和统一,而 Consensus 则是指由许多参与者对某项内容达成共识,所以一般把 Consistency 翻译为“一致性”,把 Co
阅读全文
摘要:在分布式场景中,ZooKeeper 的应用非常广泛,比如数据发布和订阅、命名服务、配置中心、注册中心、分布式锁等。 ZooKeeper 提供了一个类似于 Linux 文件系统的数据模型,和基于 Watcher 机制的分布式事件通知,这些特性都依赖 ZooKeeper 的高容错数据一致性协议。 Zab
阅读全文
摘要:Quorum 机制 Quorum 选举算法。在各种一致性算法中都可以看到Quorum 机制的身影,主要数学思想来源于抽屉原理,用一句话解释那就是,在 N 个副本中,一次更新成功的如果有 W 个,那么我在读取数据时是要从大于 N-W 个副本中读取,这样就能至少读到一个更新的数据了。 Paxos 的节点
阅读全文
摘要:Base 是三个短语的简写,即基本可用(Basically Available)、软状态(Soft State)和最终一致性(Eventually Consistent) Base 理论的核心思想是最终一致性,即使无法做到强一致性(Strong Consistency),但每个应用都可以根据自身的业
阅读全文