概述最近.NET的世界开始闹腾了,微软官方终于加入到了对.NET跨平台的支持,并且在不久的将来,我们在VS里面写的代码可能就可以通过Mono直接在Linux和Mac上运行。那么大家(开发者和企业)为什么那么的迫切的希望.NET跨平台呢?第一个理由是便宜,淘宝号称4万多台服务器全部运行在Linux,Linux平台下还有免费的MySql,这些都是免费的,这些省下来直接就是利润呀,做企业的成本可以降低又没有任何损失,何乐而不为呢?第二个理由是在Linux系统下还有很多非常优秀的构架(当然同样也是免费的),分布式缓存Memcached, 大数据处理构架Hadoop等等,这些都为一些大型的分布式系统提供了很好的支撑,当然还有诸如Liniux系统本身的一些安全和网络方面的优势,等等。 所以也难怪大佬们都纷纷不约而同的没有选择.NET。 但是如果.NET也支持跨平台之后,那这样的格局可能就要发生变化了。上面所有的优势依然可以保留,并且加上它语法的优越性,以及快速的开发效率等,还是会为其争得一席之地的。 但是,是不是Windows平台下就不能实现这些大型的分布式系统呢?我相信这个问题已经被广泛讨论过,但是至少我没有看到比较清晰的,完整的案例。带着这些问题,我决定升级我的机器,自己从头到尾在windows平台下搭建一个高可扩展性的分布式网站出来。我经验尚浅,很多的东西还处于摸索阶段,所以如果有错误,还请大师多多指点。 什么是负载均衡负载均衡可以帮我们解决两个方面的问题,第一个即提高可用性。这里面的可用性主要是从WEB服务器,的角度来讲的,如果说我们只有一台Web服务器,而它遇到了某种未知的错误导致IIS无法启动,那么我们的网站就无法访问了,这就是一种比较低的可用性。那么利用负载均衡,放在我们Web服务器的前面,由它来收集所有的请求,然后转发给我们的Web服务器, 这时候我们就可以添加两台Web服务器,如果其中有一台坏了,至少还有另一台在工作,也不至于导致我们的网络无法访问。 当然,有人可能会问,如果那台Load balancer坏了怎么办?那不是还是访问不了网站么?我们这里讨论的是提高可用性,在做到365天*24小时不间断的服务,需要有另外的组件来支撑,我们留在后面讨论。除了可用性以外,负载均衡还可以帮助我们提高可扩展性,当然这个可扩展性同样是指的Web服务器层面。从网站性能的角度来讲,好几个程序员花上好几天的时间做了一些优化所带来的效果有时候可能还没有直接加一根内存条来的快。内存加完了没什么影响,我们还可以换更好的CPU,CPU换完了,我们还可以用固态硬盘,甚至很多公司已经开始直接把数据放到内存中了(注:具体场景具体对待)。 如果这些都不可以再加了呢?那就再加机器吧,一台服务器可以处理1000个并发,那么两台理论上是2000了,所以这就有了我们的横向扩展。 负责均衡器分发请求的类型所有的请求首先全部到达Load balancer,再由它转发到具体的Web服务器,转发的方式分为以下几种:
我们还可以根据负载均衡器所使用的技术将它们分为以下几类:
不使用负载均衡的测试结果一台独立的服务器我们可以从一个网站的最初级版本开始说起,最开始的时候我们决定搭建一个网站,但是我们也不知道效果会怎么样,光键是那时候,我们很穷,于是我们租用了一台托管主机,它可能承担了至少三个或以上的角色:WEB服务器、静态资源服务器,以及数据库服务器。我们可以用ASP.NET MVC4 + SQL 2008来做一个基本的电子商务网站,基本够用了。但是能够承载多大的访问量呢?下面我们来做一个简单的测试(注意:本文以后本系列所面所有的测试都是在虚拟机上进行的,忽略网络的因素,以及多台虚拟机同时运行时CPU资源的因素,所以测试结果只是一个参考)。 在我的机器上有一台虚拟机配置如下: CPU: Intel Core I5- 4570, 3.19GHz, 测试页面没有什么复杂的逻辑,利用ASP.NET MVC4 + Entityframework 6.0 + SQL 2008 + IIS8.5来实现, 我们的页面也只是一个简单的列表页,列出系统里面所有的商品。 Home Controller 代码 Index.cshtml 代码 在数据库初始化的时候插入500条测试数据
我们使用的轻量级的ab来做压力测试,如果不熟悉ab的可以点这里,下面是测试的结果: 通过测试发现,我们这单个服务器的吞吐率接近在110~130之间,而一旦并发数达到200以后,每个请求的处理时间就达到1.5s多了,400个并发用户的时候每个请求要花上3s多的时间。如果在真实的网络环境中可能会更差。由此我们可以得出我们这个服务器可能最大支持120人左右同时访问。
|
|