参考:http://www.jdon.com/scalable.html,https://blog.csdn.net/chancein007/article/details/53983755,
最近被人问到在设计信息系统时,如何考虑性能及可扩展性的设计,由于当时自己没有什么思路,没有给出一个很好的答案,回来后自己查阅资料以及请教他人后,有了一个大致的认识。
可扩展性
可伸缩性(可扩展性)是一种对软件系统计算处理能力的设计指标,高可伸缩性代表一种弹性,在系统扩展成长过程中,软件能够保证旺盛的生命力,通过很少的改动甚至只是硬件设备的添置,就能实现整个系统处理能力的线性增长,实现高吞吐量和低延迟高性能。
性能
性能是一个系统能够同时处理用户请求的表现能力。 性能的指标通常包括,响应时间,并发数,吞吐量,以及性能计数器等。
性能和扩展性问题
- 什么是性能问题? 如果系统对于一个用户访问还很慢,那就是性能问题;
- 什么是扩展性问题? 如果你系统对一个用户来说是快的,但是在用户不断增长的高访问量下就慢了。
可扩展性和纯粹性能调优有本质区别, 可扩展性是高性能、低成本和可维护性等诸多因素的综合考量和平衡,可扩展性讲究平滑线性的性能提升,更侧重于系统的水平扩展,通过廉价的服务器实现分布式计算;而普通性能优化只是单台机器的性能指标优化。他们共同点都是根据应用系统特点在吞吐量和延迟之间进行一个侧重选择,当然水平伸缩分区后会带来CAP定理约束。
软件的可扩展性设计非常重要,但又比较难以掌握,业界试图通过云计算或高并发语言等方式节省开发者精力,但是,无论采取什么技术,如果应用系统内部是铁板一块,例如严重依赖数据库,系统达到一定访问规模,负载都集中到一两台数据库服务器上,这时进行分区扩展伸缩就比较困难,正如Hibernate框架创建人Gavin King所说:关系数据库是最不可扩展的。
对于Fabric网络来说,考虑性能和可扩展性问题时。我们可以通过给一个org部署多个peer节点,同时在应用前端部署多个应用服务器,然后通过负载均衡技术来降低单个服务器的负载,后台Kafka也可以部署多个服务器来提升Ordering Service速度。
http://www.cnblogs.com/loveis715/p/5097475.html这篇文章讲的非常详细,从中受教颇多。