25、数据存储架构:如何改善系统的数据存储能力?

在整个互联网系统架构中,承受着最大处理压力,最难以被伸缩的,就是数据存储部分。原因主要有两方面。一方面,数据存储需要使用硬盘,而硬盘的处理速度要比其他几种计算资源,比如CPU、内存、网卡都要慢一些;另一方面,数据是公司最重要的资产,公司需要保证数据的...

后端技术面试 38 讲

24、负载均衡架构:如何用10行代码实现一个负载均衡服务?

负载均衡是互联网系统架构中必不可少的一个技术。通过负载均衡,可以将高并发的用户请求分发到多台应用服务器组成的一个服务器集群上,利用更多的服务器资源处理高并发下的计算压力。 那么负载均衡是如何实现的,如何将不同的请求分发到不同的服务器上呢? 早期,实现...

后端技术面试 38 讲

23、异步架构:如何避免互相依赖的系统间耦合?

上一篇文章中我们讨论过,使用缓存架构可以减少不必要的计算,快速响应用户请求。但是缓存只能改善系统的读操作性能,也就是在读取数据的时候,可以不从数据源中读取,而是通过缓存读取,以加速数据读取速度。 但是对于写操作,缓存是无能为力的。虽然缓存的写入速度也...

后端技术面试 38 讲

22、缓存架构:如何减少不必要的计算?

上一篇我们讲到,互联网应用的主要挑战就是在高并发情况下,大量的用户请求到达应用系统服务器,造成了巨大的计算压力。互联网应用的核心解决思路就是采用分布式架构,提供更多的服务器,从而提供更多的计算资源,以应对高并发带来的计算压力及资源消耗。 那么有没有办...

后端技术面试 38 讲

21、分布式架构:如何应对高并发的用户请求

互联网应用以及云计算的普及,使得架构设计和软件技术的关注点从如何实现复杂的业务逻辑,转变为如何满足大量用户的高并发访问请求。 一个简单的计算处理过程,如果一旦面对大量的用户访问,整个技术挑战就会变得完全不同,软件开发方法、技术团队组织、软件的过程管理...

后端技术面试 38 讲

20、领域驱动设计:35岁的程序员应该写什么样的代码?

我在阿里巴巴工作的头一年,坐在我对面的同事负责开发一个公司统一的运维系统。他对这个系统经过谨慎的调研和认真的思考,花费了半年多的时间开发,终于开发完了。然后邀请各个部门的相关同事做发布评审,如果大家没什么意见就发布上线,全公司范围统一推广使用。 结果...

后端技术面试 38 讲

19、组件设计原则:组件的边界在哪里?

软件的复杂度和它的规模成指数关系,一个复杂度为100的软件系统,如果能拆分成两个互不相关、同等规模的子系统,那么每个子系统的复杂度应该是25,而不是50。软件开发这个行业很久之前就形成了一个共识,应该将复杂的软件系统进行拆分,拆成多个更低复杂度的子系...

后端技术面试 38 讲

18、反应式编程框架设计:如何使程序调用不阻塞等待,立即响应?

我们在专栏[第1篇]就讨论了为什么在高并发的情况下,程序会崩溃。主要原因是,在高并发的情况下,有大量用户请求需要程序计算处理,而目前的处理方式是,为每个用户请求分配一个线程,当程序内部因为访问数据库等原因造成线程阻塞时,线程无法释放去处理其他请求,这...

后端技术面试 38 讲

17、设计模式应用:编程框架中的设计模式

在绝大多数情况下,我们开发应用程序的时候,并不是从头开发的。比如,我们用Java开发一个Web应用,并不需要自己写代码监听HTTP 80端口;不需要处理网络传输的二进制HTTP数据包(参考[第4篇网络编程原理]);不需要亲自为每个用户请求分配一个处理...

后端技术面试 38 讲

16、设计模式基础:不会灵活应用设计模式,你就没有掌握面向对象编程

我在面试的时候,喜欢问一个问题:“你比较熟悉哪些设计模式?”得到的回答很多时候是“单例”和“工厂”。老实说,这个回答不能让人满意。因为在我看来,单例和工厂固然是两种经典的设计模式,但是,这些创建类的设计模式并不能代表设计模式的精髓。 设计模式的精髓在...

后端技术面试 38 讲