wcf系列学习5天速成——第四天 wcf之分布式架构(转载)
2012-08-17 14:01
399 查看
今天是wcf系列的第四天,也该出手压轴戏了。嗯,现在的大型架构,都是神马的,
nginx鸡群,iis鸡群,wcf鸡群,DB鸡群,由一个人作战变成了群殴.......
今天我就分享下wcf鸡群,高性能架构中一种常用的手法就是在内存中维护一个叫做“索引”的内存数据库,
在实战中利用“索引”这个概念做出"海量数据“的秒杀。
好,先上图:
Program.cs
性能图:
对的,一个秒杀,一个是毫秒杀,所以越复杂越能展示出“内存索引”的强大之处。
nginx鸡群,iis鸡群,wcf鸡群,DB鸡群,由一个人作战变成了群殴.......
今天我就分享下wcf鸡群,高性能架构中一种常用的手法就是在内存中维护一个叫做“索引”的内存数据库,
在实战中利用“索引”这个概念做出"海量数据“的秒杀。
好,先上图:
Program.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ServiceModel; using System.Timers; using System.Diagnostics; using BaseClass; using ClientService; using ClientService.HeartBeatService; using System.Configuration; using SearhService; namespace ClientService { class Program : IAddressCallback { static void Main(string[] args) { ServiceHost host = new ServiceHost(typeof(ServiceList)); host.Open(); var client = new AddressClient(new InstanceContext(new Program())); //配置文件中获取iis的地址 var iis = ConfigurationManager.AppSettings["iis"]; //将iis的地址告诉心跳 client.GetService(iis); //从集群中获取search地址来对Search服务进行调用 var factory = new ChannelFactory<IProduct>(new NetTcpBinding(SecurityMode.None), new EndpointAddress(ServiceList.Search)); //根据userid获取了shopID的集合 //比如说这里的ShopIDList是通过索引交并集获取的分页的一些shopID var shopIDList = factory.CreateChannel().GetShopListByUserID(15); var strSql = string.Join(",", shopIDList); Stopwatch watch = new Stopwatch(); watch.Start(); SqlHelper.Query("select s.ShopID,u.UserName,s.ShopName from [User] as u ,Shop as s where s.ShopID in(" + strSql + ")"); watch.Stop(); Console.WriteLine("通过wcf索引获取的ID >>>花费时间:" + watch.ElapsedMilliseconds); //普通的sql查询花费的时间 StringBuilder builder = new StringBuilder(); builder.Append("select * from "); builder.Append("(select ROW_NUMBER() over(order by s.ShopID) as NumberID, "); builder.Append(" s.ShopID, u.UserName, s.ShopName "); builder.Append("from Shop s left join [User] as u on u.UserID=s.UserID "); builder.Append("where s.UserID=15) as array "); builder.Append("where NumberID>300000 and NumberID<300050"); watch.Start(); SqlHelper.Query(builder.ToString()); watch.Stop(); Console.WriteLine("普通的sql分页 >>>花费时间:" + watch.ElapsedMilliseconds); Console.Read(); } public void LiveAddress(string address) { } } }
性能图:
对的,一个秒杀,一个是毫秒杀,所以越复杂越能展示出“内存索引”的强大之处。
相关文章推荐
- wcf系列学习5天速成——第四天 wcf之分布式架构
- wcf系列学习5天速成——第四天 wcf之分布式架构
- wcf系列学习5天速成——第四天 wcf之分布式架构
- wcf系列学习5天速成——第四天 wcf之分布式架构
- wcf系列学习5天速成——第四天 wcf之分布式架构
- wcf系列学习5天速成——第四天 wcf之分布式架构
- wcf系列学习5天速成——第三天 事务的使用(转载)
- wcf系列学习5天速成——第五天 服务托管(转载)
- wcf系列学习5天速成——第四天 wcf之分布式架构
- WCF系列学习5天速成
- wcf系列学习5天速成——第三天 事务的使用
- 【.Net码农】huangxincheng一线码农系列--wcf系列学习5天速成
- wcf系列5天速成——第一天 binding的使用(1)(转载)
- wcf系列学习5天速成——第五天 服务托管
- wcf系列5天速成——第二天 binding的使用(2)(转载)
- wcf系列学习5天速成——第五天 服务托管
- wcf系列学习5天速成——第三天 事务的使用
- wcf系列学习5天速成——第三天 分布性事务的使用 有时间再验证下 不同库的操作
- wcf系列学习5天速成——第三天 事务的使用
- wcf系列学习5天速成——第五天 服务托管