课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
高可用性是程序员在开发软件的时候需要遵循的一个软件开发标准,而今天我们就通过案例分析来了解一下,高可用性软件开发包含哪些特点。
可扩展
扩展是常见的提升系统可靠性的方法,系统的扩展可以避免单点故障,即一个节点出现了问题造成整个系统无法正常工作。
换一个角度讲,一个容易扩展的系统,能够通过扩展来成倍的提升系统能力,轻松应对系统访问量的提升。
一般地,扩展可以分为垂直扩展和水平扩展:
1、垂直扩展
在同一逻辑单元里添加资源从而满足系统处理能力上升的需求。
比如,当机器内存不够时,我们可以帮机器增加内存,或者数据存不下时,我们为机器挂载新的磁盘。
垂直扩展能够提升系统处理能力,但不能解决单点故障问题。
优点:扩展简单。
缺点:扩展能力有限。
2、水平扩展
通过增加一个或多个逻辑单元,并使得它们像整体一样的工作。
水平扩展,通过冗余部署解决了单点故障,同时又提升了系统处理能力。
优点:扩展能力强。
缺点:增加系统复杂度,维护成本高,系统需要是无状态的、可分布式的。
可扩展性系数scalabilityfactor通常用来衡量一个系统的扩展能力,当增加1单元的资源时,系统处理能力只增加了0.95单元,那么可扩展性系数就是95%。当系统在持续的扩展中,可扩展系数始终保持不变,我们就称这种扩展是线性可扩展。
在实际应用中,水平扩展常见:
1)通常我们在部署应用服务器的时候,都会部署多台,然后使用nginx来做负载均衡,nginx使用心跳机制来检测服务器的正常与否,无响应的服务就从集群中剔除。这样的集群中每台服务器的角色是相同的,同时提供一样的服务。
2)在数据库的部署中,为了防止单点故障,一般会使用一主多从,通常写操作只发生在主库。不同数据库之间角色不同。当主机宕机时,一台从库可以自动切换为主机提供服务。
可隔离
隔离,是对什么进行隔离呢?是对系统、业务所占有的资源进行隔离,限制某个业务对资源的占用数量,避免一个业务占用整个系统资源,对其他业务造成影响。
隔离级别按粒度从小到大,可以分为线程池隔离、进程隔离、模块隔离、应用隔离、机房隔离。在数据库的使用中,还经常用到读写分离。
1、线程池隔离
不同的业务使用不同的线程池,避免低优先级的任务阻塞高优先级的任务。或者高优先级的任务过多,导致低优先级任务永远不会执行。
2、进程隔离
Linux中有用于进程资源隔离的LinuxCGroup,通过物理限制的方式为进程间资源控制提供了简单的实现方式,为LinuxContainer技术、虚拟化技术的发展奠定了技术基础
3、模块隔离、应用隔离
很多线上故障的发生源于代码修改后,测试不到位导致。按照代码或业务的易变程度来划分模块或应用,把变化较少的划分到一个模块或应用中,变化较多的划分到另一个模块或应用中。减少代码修改影响的范围,也就减少了测试的工作量,减少了故障出现的概率。
4、机房隔离
主要是为了避免单个机房网络问题或断电吧。
5、读写分离
一方面,将对实时性要求不高的读操作,放到DB从库上执行,有利于减轻DB主库的压力。
另一方面,将一些耗时离线业务sql放到DB从库上执行,能够减少慢sql对DB主库的影响,保证线上业务的稳定可靠。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请在707945861群中学习了解。