JasonBourne

浅谈依赖、关联、聚合和组合

面向对象编程中,依赖、关联、聚合和组合是描述对象之间关系的常用概念。它们具有不同的含义和强度,以下是对它们的详细说明以及示例说明: 依赖(Dependency) 依赖表示一个对象(或类)在执行过程中需要另一个对象(或类)的支持或协助。它描述了一个对象(或类)对另一个对象(或类)的依赖关系。 依赖关系通常体现在一个对象(或类)通过参数、方法调用、接口实现等方式使用另一个对象(或类...

关于架构设计的一点心得

架构就是业务的正交分解。每个模块都有它自己的业务。 这里我们说的模块是一种泛指,它包括:函数、类、接口、包、子系统、网络服务程序、桌面程序等等。架构行为的三步曲:“需求分析”、“概要设计”、模块的 “详细设计”,背后都直指业务的正交分解,只是逐步递进,一步步从模糊到越来越强的确定性,直至最终形成业务设计的完整的、精确无歧义的解决方案。 框架体现需求泛化的能力,就是架构可以适应需求的变化。需...

系统的扩展性与弹性

系统的扩展性和弹性是两个关键的概念,用于描述系统在面对不同需求和负载时的能力和特性。虽然它们有一些相似之处,但在意义和应用上存在一些区别。 扩展性(Scalability): 扩展性是指系统能够有效地处理增加的负载或需求,而不会降低性能或功能。它关注系统在适应不同规模的增长时的能力。通常,扩展性是通过增加资源(如计算资源、存储容量、网络带宽等)来实现...

Docker

Docker是什么 Docker 是一个开源的应用容器引擎,其中包括镜像、容器、仓库等功能,目的就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的程序及其环境能够做到“一次封装,到处运行”。Docker实际上就相当于一个集装箱,它可以把不同的应用全都放在它的集装箱里面,并且以后有需要的时候,可以直接把集装箱搬到其他平台或者服务器上。残酷的是相比于容器本身,更有价值的是容器编...

服务间通信

在单体架构中,不同模块之间可以通过项目引用的方式直接使用接口调用,单次请求在同一台机器的同一个进程内进行,这种调用方式称为本地调用,但是在微服务架构中,每个服务都是独立的进程,并且通常部署在不同的服务器,无法简单的使用本地调用的方式,而是需要远程服务调用来实现服务间的通信。 通信模式的划分 目前有很多种进程间通信的技术供开发者选择,可以使用基于同步请求/响应的通信机制,例如:ht...

服务注册与发现

在微服务架构中,由于系统的拆分,通常会有很多的服务,而每个服务又可能因为横向扩展而部署在多台服务器上,当服务A需要调用服务B的接口时,服务A该如何知道服务B的主机地址就成了一个问题,如果将B服务地址写死在配置文件中,那么当服务B扩展、下线或主机迁移时,服务A都需要改动配置文件以保证接口的正常调用,如果只有服务A需要调用服务B还好,手动修改也不是十分麻烦,但是在复杂的微服务架构中,一个服...

微服务架构

架构的本质 熵增定律:一个封闭系统,都是从有序到无序,也就是它的熵(即混乱程度)会不断地增加,最终系统会彻底变得无序。 这个理论放在软件系统的演化上,也是非常适用的。一方面,随着业务需求的增加,我们会往系统里不停地添加业务功能;另一方面,随着访问量的不断增加,我们会不断通过技术手段来加强系统非业务性功能。如果事先不做良好的设计,随着时间的推进,整个系统野蛮生长,就会逐渐碎片化,越来越无序...

从 ACID 到 CAP/BASE

从 ACID 到 CAP/BASE 在分布式系统中,存储基本都是多副本形式的,之所以采用这种模式,有以下两种原因: 提高系统可用性,防止单点故障引起的系统不可用 提高系统性能,利用负载均衡,让多副本分担流量压力 数据复制在可用性和性能方面给分布式系统带来的好处是不言而喻的,但是数据复制所带来的一致性挑战,也是所有开发人员需要面对的。 如何保证数据的一致性,同时又不影响系统...

MySQL 锁

数据库锁设计的初衷是处理并发问题。作为多用户共享的资源,当出现并发访问的时候,数据库需要合理地控制资源的访问规则。而锁就是用来实现这些访问规则的重要数据结构。 根据加锁的范围,MySQL里面的锁大致可以分为全局锁、表级锁和行锁三类。 全局锁 全局锁就是对整个数据库实例加锁。MySQL 提供了一个加全局读锁的方法,命令是 Flush tables with read lock (FTWR...

MySQL 刷脏页

平时的工作中,不知道你有没有遇到过这样的场景,一条 SQL 语句,正常执行的时候特别快,但是有时也不知道怎么回事,它就会变得特别慢,并且这样的场景很难复现,它不只随机,而且持续时间还很短。在这一瞬间,MySQL 可能就是在刷脏页(flush)。 当内存数据页跟磁盘数据页内容不一致的时候,我们称这个内存页为“脏页”。内存数据写入到磁盘后,内存和磁盘上的数据页的内容就一致了,称为“干净页”。 ...

MySQL 存储结构

存储结构 MySQL的存储结构 表存储结构 单位:表>段>区>页>行 在数据库中, 不论读一行,还是读多行,都是将这些行所在的页进行加载。也就是说存储空间的基本单位是页。 一个页就是一棵树B+树的节点,数据库I/O操作的最小单位是页,与数据库相关的内容都会存储在页的结构里。 B+树索引结构 在一棵B+树中,每个节点为都是一个页,每次新建节点的时候,就会申请一个页...