先定个小目标, 使用C# 开发的千万级应用

 

dotNET跨平台

opendotnetlinux

在这里你能够谈微软.NET,Mono的跨平台开发技术,也能够谈谈其余的跨平台技术。
在这里可让你的.NET项目有新的思路,不局限于微软的技术栈,横跨Windows,Linux 主流平台
程序员

话说昨天的港股发生了一件大事,腾讯成为亚洲市值最高的公司,在这历史性的一刻,做为在鹅厂工做的C# 程序员,也应该让世人了解下C# 并非那么没有市场。在鹅厂,代码构成中60%以上是C++, C#也有10%左右的份额,后续的文章中我会和你继续分享,固然若是你有兴趣加入鹅厂会更快获取相似信息,须要能够找我内推。小二计划写几篇文章来让你们正确的认识下C#。web

当咱们还没来得及把本身的梦想捂热的时候,伟大的王老师一语惊醒了全部吃瓜的围观群众——人嘛,光着眼于梦想是不行滴,仍是要先定一个能达到的小目标。一个一天处理5000万级别的应用,换算成每秒578个请求,固然应用不会这么平淡,有高峰有低谷,不过这也不是很难达到的目标,咱们就来看看这样的一个小目标如何实现,这里分享的是个人一个真实案例:腾讯OA基础服务,简称TOF。数据库

首先给出一个直观的数据,让你们有个初步的印象。json

 

2015-11-5 这天的组织架构API的请求数达到36535867,超过了三千万的请求,这天的总请求数48922122,接近五千万的请求。 后端

你很难想象到TOF使用的是.NET技术构建的,可以在天天几千万请求,能够媲美一样是.NET技术构建的StackOverflow社区,不过确实我也使用了大量StackOverflow开源的.NET技术,架构上也很是像StackOverflow。下面列下硬件列表:缓存

·6台数据库服务器(6台SQL Server),其中3台SQL Server 2012 Always集群式核心数据库使用的是物理服务器性能优化

·12台Web服务器(IIS7.5),服务器是IT云VD-6机器(8核32G内存)服务器

·2台分布式缓存服务器(Redis),服务器是IT云VD-5机器(4核16G内存)微信

·8台应用服务器(处理TOF的核心业务,使用WCF服务构建),服务器是IT云VD-6机器(8核32G内存)

·IT云提供的负载均衡服务器(LVS集群)

这些服务器都是虚拟化的服务器,腾讯IT有个内部的私有云平台的机器,比StackOverflow的服务器比起来要弱不少。可是我在程序的架构和性能优化方面作了不少,程序架构上采用微服务架构的思想,一图胜千言,下面给出TOF的架构图:

 

上面是整体的架构图,那么每一个具体的服务又遵循了单体应用的架构,使用的是N层服务,一图胜千言,下面给出TOF的服务架构图。

负载均衡(LVS

负载均衡使用的LVS和tlinux,负载均衡器使用的是IT云的LVS集群,经过IT云进行管理

Web层架构(IIS 7.5ASP.Net MVC 5.2.1,和.Net 4.5.2

TOF通过负载均衡层导入流量到12台Web服务器, 分区域部署在2个地区,Web层经过WCF服务同后端的业务服务交互。

服务层(WCF 4.5 Net 4.5.2

在总体逻辑架构图上能够清晰的看到,紧挨着Web层的是服务层(部署在Window服务器Windows 2008 R2上)。服务层基于WCF实现的微服务架构。为了提高这服务作了很是多的冗余,每一个服务都有至少3个实例。

缓存(Redis

TOF在缓存层用Redis,Redis服务器16G内存,采用master/slave结构部署,尽管天天2500万的ops,每一个实例的CPU使用率也在2%之下。

Redis所在服务器有L1/L2高速缓存,Web服务的HTTP缓存设置在一级缓存L1中,Redis缓存在二级缓存L2。当用户访问在一级缓存L1中未命中后会去二级缓存中的Redis取值,若是web服务在L1和L2两级缓存都未命中,则会直接去原始数据源获取(好比,数据库查询,API回调等),而后并把获取到的结果缓存到本地和Redis中,这时其它服务未命中L1高速缓存便会去二级缓存L2/Redis中获取,节省了调用数据库查询或者API回调的访问时间。

OA登录和组织架构都有本身的L1/L2高速缓存,经过L1缓存Key前缀、L2/Redis缓存数据库ID。

贴张Redis缓存服务已经运行445天,处理了110亿的请求的监控图:

数据库(SQL Server)

SQL Server是TOF惟一的源数据库,全部Redis的数据都来自SQL Server。使用微软的SQL Server监控组件AlwaysOn Availability Groups部署了一个SQL Server集群。服务器集群的配置也比较低4核32G 的A5机器。 

全部数据库过去24小时CPU监控图如图所示,大部分状况CPU使用率较低,偶尔作下缓存任务时会高些。

细心的朋友可能看出上图就是使用StackOverflow开源的Opserver所采集的数据。

.NET应用程序性能优化

TOF系统属于高并发的系统,使用系统默认的配置是不行的,须要对操做系统和.NET框架作优化:

  • Windows优化:调整tcp链接数,保证系统层面保证服务的不受限于操做系统,调整操做系统的TCP/IP参数,好比把Time_Wait 时间窗口2分钟à45秒,可用的端口数调整到65535,默认才5024个,对一个大并发的系统来讲远远不够。

  • Web服务器优化:根据服务器的CPU核数调整进程数和HTTP层相关配置。

  • WCF框架的参数优化:

  1. 采起NETTCP绑定,保证框架通讯的高效率

  2.  序列化:xml -> rest\json ->protobuf,适配器模式,使用protobuf替代wcf默认的二进制序列化,这里就能够6倍的性能提高。

  3.  根据服务流量调整WCF流量限制配置的值  

 

  整体来讲,TOF总体架构并无采用那些很是高端的技术,使用的都是很是普通的.NET技术,混合使用Windows/Linux和开源技术照样能够打造高性能高并发的应用系统。 

 

相关文章:

相关文章
相关标签/搜索