构建可扩展的高性能Internet应用程序
时间过得很快,离新公司已经两个月了,在这两个月里,我也感觉很深。让我们谈谈你的一些理解。
一、应用无状态
俗话说,系统的可扩展性取决于应用程序状态的管理方式。你为什么这么说?让我们想象一下,如果我们在会话中与客户端保存了大量的状态信息,那么当保存状态信息的服务器关闭时我们该怎么办?一般来说,我们都通过聚类解决了这个问题。一般来说,集群不仅具有负载均衡,更重要的是,还有故障转移故障转移,例如tomcat使用的集群节点广播复制,jboss采用的配对复制。会话状态复制策略,但集群中的状态恢复也有其缺点,即严重影响系统的可扩展性。通过添加更多计算机,系统无法实现良好的水平扩展,因为群集节点之间的会话通信将随之而来。节点数量增加,开销增加。因此,为了实现应用程序本身的可伸缩性,我们需要确保应用程序的无状态性,以便集群中的节点相同,从而使系统更好。伸缩。
好吧,上面提到了无国籍的重要性,那么如何实现无国籍呢?此时,会话框架将起作用。通常,可以使用cookie或集中式会话管理来实现,即多个无状态应用程序节点连接到一个会话服务器,会话服务器将会话保存到缓存,会话服务器后端配有底层的持久数据源,如数据库、文件等。系统。等一下。
二、有效使用缓存
做Internet应用程序的兄弟应该知道缓存对Internet应用的重要性,从浏览器缓存、反向代理缓存、页面缓存、本地页面缓存、对象缓存等等。
一般来说,缓存可以根据应用程序的接近程度分为:本地缓存和远程缓存。在常规系统中,使用本地缓存或远程缓存。如果两者混合,则本地缓存和远程缓存的数据一致性处理将变得更加麻烦。
在大多数情况下,我们谈论的是读缓存,还有另一种类型的缓存:写缓存。对于一些读写率低、数据安全性要求低的数据,我们可以缓存它们以减少对底层数据库的访问,例如访问统计商品的次数、API调用的数量等。我们可以先使用写内存缓存,然后延迟对数据库,可以很大。减少对数据库的写入压力。