一切福田,不離方寸,從心而覓,感無不通。

.NET技术+25台服务器怎样支撑世界第54大网站

英文原文:StackOverflow Update: 560M Pageviews A Month, 25 Servers, And It’s All About Performance StackOverflow 是一个 IT 技术问答网站,用户可以在网站上提交和回答问题。当下的 StackOverflow 已拥有 400 万个用户,4000 万个回答,月 PV5.6 亿,世界排行第 54。然而值得关注的是,支撑他们网站的全部服务器只有 25 台,并且都保持着非常低的资源使用率,这是一场高有效性、负载均衡、缓存、数据库、搜索及高效代码上的较量。近日,High Scalability 创始人 Todd Hoff 根据 Marco Cecconi 的演讲视频“ The architecture of StackOverflow”以及 Nick Craver 的博文“ What it takes to run Stack Overflow”总结了 StackOverflow 的成功原因。 意料之中,也是意料之外,Stack Overflow 仍然重度使用着微软的产品。他们认为既然微软的基础设施可以满足需求,又足够便宜,那么没有什么理由去做根本上的改变。而在需要的地方,他们同样使用了 Linux。究其根本,一切都是为了性能。 另一个值得关注的地方是,Stack Overflow 仍然使用着纵向扩展策略,没有使用云。他们使用了 384GB 的内存和 2TB 的 SSD 来支撑 SQL Servers,如果使用 AWS 的话,花费可想而知。没有使用云的另一个原因是 Stack Overflow 认为云会一定程度上的降低性能,同时也会给优化和排查系统问题增加难度。此外,他们的架构也并不需要横向扩展。峰值期间是横向扩展的杀手级应用场景,然而他们有着丰富的系统调整经验去应对。该公司仍然坚持着 Jeff Atwood 的名言——硬件永远比程序员便宜。 Marco Ceccon 曾提到,在谈及系统时,有一件事情必须首先弄明白——需要解决问题的类型。首先,从简单方面着手,StackExchange 究竟是用来做什么的——首先是一些主题,然后围绕这些主题建立社区,最后就形成了这个令人敬佩的问答网站。 其次则是规模相关。StackExchange 在飞速增长,需要处理大量的数据传输,那么这些都是如何完成的,特别是只使用了 25 台服务器,下面一起追根揭底: 状态 StackExchange 拥有 110 个站点,以每个月 3 […]

龙生   15 Apr 2015
View Details

NuGet学习笔记(2)——使用图形化界面打包自己的类库

上文NuGet学习笔记(1) 初识NuGet及快速安装使用说到NuGet相对于我们最重要的功能是能够搭建自己的NuGet服务器,实现公司内部类库的轻松共享更新。在安装好NuGet扩展后,我们已经能够通过NuGet轻松下载自己需要的类库,下面来说一说如何将自己的项目类库进行打包发布 使用图形界面打包自己的类库 NuGet可以使用NuGet.exe在命令行下进行类库打包,也可以使用图形化界面进行打包,估计很多朋友都和我一样对不熟悉的命令行有些感冒,所以在此仅讲述下使用图形化界面进行类库打包 1. 首先下载 包包管理器 NuGetPackageExplorer,顾名思义,包包管理器可以用来创建新的类库包,也可以浏览已经创建好的类库包 2. 下载完成后,双击 NuGetPackageExplorer.application 进行安装,安装完成后会在桌面上生成一个NuGet Package Explorer 的快捷方式 3. 双击NuGet Package Explorer出现启动界面,选择Create a new package(Ctrl+N)创建一个新包 4. 选择菜单 Edit > Edit Package Metadata (或者 CTRL + K) 编辑包包信息 这里可以编辑类库包的信息和添加类库、程序集的引用解释下几个比较重要的字段 Id:用于定位类库包的唯一标示,如在命令行下执行 Install-Package MyPackage 这里的MyPackage就是包包的Id值 Version:类库的版本号,这里建议和程序集的真实版本号保持一致,以免发生混淆 Dependencies:此类库依赖的程序集,根据实际情况添加依赖类库的Id和版本号,若无留空即可,这里需要注意下填写的依赖类库需要在NuGet服务器上能找到,否则无法完成自动引用添加 Framework assemblies:依赖的Framework 程序集,根据实际需要选择即可,一般无需设置 除以上四项以外其他属性根据实际情况修改即可,若自己用不修改也中,不过为了使用方便还是建议把类库描述(Description)填写下 5. 编辑好包包信息后接下来添加DLL到包包中 可以选择 右键-->Add Existinng File… 选择dll添加,也可以直接拖拽DLL到 Package contents 窗口,此例选择拖拽方式 直接拖拽dll到窗口后,会出现提示:是否将 Winista.HtmlParser.dll放到lib 文件夹下,一般我们选择是 6. DLL添加完成后,快捷键Ctrl + K 修改包包信息Id为Winista.HtmlParser,版本号为1.8.0 7. 信息修改和dll都添加完毕后,选择File --> Save(或Ctrl + S)将文件进行保存,默认文件名为Id + 版本号.nupkg 8. 完成保存后如需要发布到网上,选择File--> Publish…(或Ctrl + P) 默认的发布地址是官网,发布 Key需要到官网去注册一个账号,然后就可以得到,这里不在复述,若无需发布直接关闭即可 ps:这里没有讲述如何打包项目文件,一般情况下我们自己将项目文件编译成DLL然后使用图形化界面打包即可满足需求,若实际工作需要高度集成完全自动化操作可自行去研究下官方文档http://docs.nuget.org/ 添加DLL默认会添加Lib文件夹,额外的菜单上还有很多.net文件夹,src等文件夹,这些文件夹只是对文件上的一个物理上的划分而已,只是为了帮助我们做好文件分类,没有其他的用途,dll文件可以随便放置,不过为了规范还是建议按照通常习惯来放置。   from:http://kb.cnblogs.com/page/143191/

龙生   15 Apr 2015
View Details

There is no build provider registered for the extension '.html'. You can register one in the section in machine.config or web.config. Make sure is has a BuildProviderAppliesToAttribute attribute which includes the value 'Web' or 'All'.

我的站,是使用UrlRewriter将.html重写为.aspx,即访问.html 实际访问的是.aspx ,但实际存在的.html文件,却出现“There is no build provider registered for the extension '.html'. You can register one in the <compilation><buildProviders> section in machine.config or web.config. Make sure is has a BuildProviderAppliesToAttribute attribute which includes the value 'Web' or 'All'.‘的错误 百度,发现介绍解决方案差不多跟这个地址 http://hi.baidu.com/xiaoyaosr/item/351f2f3ce3b48223b3c0c52e  提供的方法一样。 但是,我按此方法来做,却出现错误,原来的重写还能写,现在地却也用不了了,错误如图 web.config文件配置如图 from:http://bbs.csdn.net/topics/390823510

龙生   15 Apr 2015
View Details

NuGet学习笔记(1)——初识NuGet及快速安装使用

关于NuGet园子里已经有不少介绍及使用经验,本文仅作为自己研究学习NuGet一个记录。 初次认识NuGet是在去年把项目升级为MVC3的时候,当时看到工具菜单多一项Library Package Manager,右键项目文件多了一项Manage Nuget Packages…,这是个神马玩意儿,当时是一头雾水,后台查了些资料才知到NuGet是 Visual Studio的一个扩展,引用dudu的话来说就是管理程序的包包,可以参考msdn上这篇文章使用 NuGet 管理项目库以及咱们博客园站长dudu写的程序员,用NuGet管理好你的类库,有些类似java中常用的maven 为什么要使用NuGet 简单的说NuGet可以是我们的工作更方便,当我们的项目里要引用到的一些库时候,比如JQuery、Newtonsoft.Json、log4net等,我们需要从网上下载这些库,然后依次拷贝到各个项目中,当有的类库有更新时又不得不再重复一遍很是繁琐 ,这时就可以考虑使用NuGet来帮我们管理和更新这些类库,而且更新类库时会自动添加类库的相关引用,方便至极。当然网上一些我们常用的类库更新频率不是很高而且即便出了新版本我们也没必要总是保持最新,故这点对我们的帮助比较有限,个人认为NuGet最大的好处在于可以搭建自己的类库服务器,想想一下吧,在一些较大些的公司里面有很多的项目,然后其中有一些是整个组,甚至整个公司通用的类库,当这些类库有更新后我们需要依次拷贝到我们的项目,甚至于有时候我们自己都搞不清楚各个项目里的版本是否一致,有时偶尔一两个项目忘了复制更新出现莫名其妙的错误,为此头疼不已,现在有了NuGet,世界从此而不同。 安装NuGet扩展 要使用NuGet首先需要安装它(在安装了MVC3的系统上已自动安装了NuGet) 1. 点击 工具-->扩展管理器(R)…-->右上角搜索框输入NuGet 2. 点击 NuGetPackage Manager 项上面的下载按钮开始下载NuGet 3. 下载完成后出现安装页面,点安装开始安装 4. 很快安装完成,然后点击关闭完成整个安装 5. 安装完后NuGet暂时不能用,需要重新启动下VS才行,重启后完毕后打开 扩展管理器(R)… 在已安装的扩展里可以看到NuGet Package Manager已经安装好了 使用NuGet下载需要的类库 1. 打开NuGet管理界面 2. 出现如下界面,可以在里面找自己想要的类库也可以在右上角搜索里面输入关键字查找自己想要的类库,找到合适自己的类库后点install进行安装 3. 这里我们选择安装Json.Net,点击安装好出现组件下载界面 4. 下载完成后会出现提示将类库安装到什么项目,这里我们选择安装到TestConsole项目 5. 安装完成后可以看到已经安装的Josn.Net显示一个已安装的小对勾 6. 打开项目引用可以看到我们刚选择的类库Newtonsoft.Json已经自动添加到项目引用中 使用命令行管理你的类库 1. NuGet提供了命令行安装方法,在菜单中选择Package Manager Console,打开命令行控制台 2. 出现NuGet控制台界面,默认类库源(Package source)为官方站点,也可以指向自己搭建的本地或内网站点,Default project表示默认将下载的类库添加到那个项目的引用中 3. NuGet控制台有几个常用命令 Get-Package 获取当前项目已经安装的类库 Install-Package 安装指定类库,命令格式如下:Install-Package 类库ID,如Install-Package Newtonsoft.Json 这里需要注意的是类库的ID是唯一的,指向命令后会自动搜索指定类库源里指定ID类库,若找到则自动下载并添加引用,找不到则会出现找不到类库的提示 Uninstall-Package 卸载指定类库,命令格式如下:Uninstall-Package 类库ID,如Uninstall-Package Newtonsoft.Json Update-Package 更新指定类库,命令格式如下:Update-Package 类库ID,如Update-Package Newtonsoft.Json ps:刚开始不熟悉时可以使用界面方式下载和更新类库,有一定经验后还是建议使用控制台添加、更新类库这样很方便,由于使用控制台需要知道类库的准确ID,可以到http://www.nuget.org/packages这里去查找,把自己常用的ID记录下方便以后使用。   from:http://kb.cnblogs.com/page/143190/

龙生   15 Apr 2015
View Details

Ext.grid.Panel表格分页

Ext.grid.Panel表格分页示例 代码: cshtml

controller

效果图: from:http://www.cnblogs.com/libingql/archive/2012/04/22/2464994.html

龙生   13 Apr 2015
View Details

若要允许 GET 请求,请将 JsonRequestBehavior 设置为 AllowGet

请将 JsonRequestBehavior 设置为 AllowGet MVC 默认 Request 方式为 Post。 action 1 public JsonResult GetPersonInfo() { 2 var person = new { 3 Name = "张三", 4 Age = 22, 5 Sex = "男" 6 }; 7 return Json(person); 8 } 或者 01 public JsonResult GetPersonInfo() { 02 return Json (new{Name = "张三",Age = 22,Sex = "男"}); 03 } 04 view 05 $.ajax({ 06 url: "/FriendLink/GetPersonInfo", 07 type: "POST", 08 dataType: "json", 09 data: { }, 10 success: function(data) { 11 $("#friendContent").html(data.Name); 12 } 13 }) POST 请求没问题,GET 方式请求出错: […]

龙生   13 Apr 2015
View Details

通C#访问MongoDB数据

开始: 先下载个C#的驱动。MongoDB提供各种主流与非主流预言的开发驱动。 C# Driver 下载地址:猛击这里 CSharp Driver Tutorial:猛击这里 下载文件安装或者解压缩包 如果您是安装,请到安装位置寻找,如果是ZIP压缩包,解压缩包得到如下两个文件: MongoDB.Bson.dll              :序列化、Json相关 MongoDB.Driver.dll             :我们的驱动 没了,只有这两个文件是我们的最爱。   继续: 新建一个C#的项目,不管你是vs2008,还是vs2010,也许您手中有vs2012?也发给我一份吧。感谢共享:) 添加引用,将上面两个DLL引入到项目里面   您启动Mongod.exe了吗?启动服务。   代码里面添加命名空间: using MongoDB.Bson; using MongoDB.Driver; 跟着[CSharp Driver Tutorial:猛击这里]继续做。如果您没有打开[CSharp Driver Tutorial]就不要开了,看完全文再看,以免分散精力。 //  MongoDB连接串,以[mongodb: // ]开头。这里,我们连接的是本机的服务 string  connectionString  =   " mongodb://localhost " ; //  连接到一个MongoServer上 MongoServer server  =  MongoServer.Create(connectionString); MongoDb的连接串 在连接串中,我们可以指定其他机器上的服务和连接端口格式如下: mongodb://[username:password@]hostname[:port][/[database][?options]] 简单示例:mongodb://server1,server2:27017,server2:27018 更进一步详细的信息请查看[CSharp Driver Tutorial:猛击这里] MongoServer 有几种不同的重载了的创建方式: MongoServer Create()   如果只是连接本机,并且本机只启动了一个服务,直接调用这个方法,完全不需要连接串 MongoServer Create(MongoConnectionStringBuilder builder) MongoServer Create(MongoUrl url) MongoServer Create(string connectionString) MongoServer Create(Uri uri) 更进一步详细的信息请查看[CSharp Driver Tutorial:猛击这里] 继续: 再增加几行代码: //  MongoDB连接串,以[mongodb: // ]开头。这里,我们连接的是本机的服务 string  connectionString  =   " mongodb://localhost […]

龙生   05 Apr 2015
View Details

推荐 11 款 React Native 开源移动 UI 组件

本文推荐 11 个非常棒的 React Native 开源组件,希望能给移动应用开发者提供帮助。 React Native 是近期 Facebook 基于 MIT 协议开源的原生移动应用开发框架,已经用于 Facebook 的生产环境。React Native 可以使用最近非常流行的 React.js 库来开发 iOS 和 Android 原生 APP。 1. iOS 表单处理控件 tcomb-form-native tcomb-form-native 是 React Native 强大的表单处理控件,支持 JSON 模式,可插拔的外观和感觉。在线演示:http://react.rocks/example/tcomb-form-native。 2. 摄像机视图 react-native-camera react-native-camera 是 React Native 的摄像头 viewport。这个模块应用于开发的早期阶段,它支持摄像头的转换和基本图片捕捉。 使用示例: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 var React = require('react-native'); var {   AppRegistry,   StyleSheet,   Text,   View, } = React; var Camera = require('react-native-camera'); var cameraApp = React.createClass({   render: function() { […]

龙生   04 Apr 2015
View Details

关于Mongodb启动服务时1067错误的解决方法

如图:按照官网Install MongoDB on Windows(参考文尾备注)章节介绍安装完服务之后,无论是命令行net start mongodb,还是在系统服务中启动MongoDB服务,都会提示1067的错误。 网上有些说删除Mongodb数据库目录下的mongod.lock文件之后可以正常重启服务,但是笔者试了之后还是不行,也觉得删除这类文件是治标不治本或者不安全的。 仔细看了下上面链接中的文档,因为我并未按照默认的C:\路径安装Mongodb,以及在C:\下面md data文件存放数据库,而是放在了D:\MongoDB(程序目录),以及D:\DB_MongoDB(数据库目录),初步觉得问题就出在这个问题之上。         如图,在mongod.cfg文件中指定了dbpath,再启动服务,就正常了。 (不止dbpath,其它必要的配置不正确或者不完全也可能导致1067服务启动失败的情况。) 备注: 官方安装Mongodb的Windows服务说明可能在更新,一般可按照以下方法直接安装Windows服务: ? 1 D:\Program Files\MongoDB 2.6 Standard\bin>mongod --install --serviceName MongoDB --serviceDisplayName MongoDB --logpath D:\Program Files\MongoDB 2.6 Standard\log\MongoDB.Log --dbpath D:\Program Files\MongoDB 2.6 Standard\db --directoryperdb 需要注意的是,log与db目录都要事先创建。   from:http://my.oschina.net/iuranus/blog/176258

龙生   04 Apr 2015
View Details

Mongodb 安装 以及 问题解决

一,下载 1.官网为:http://www.mongodb.org/ ;下载安装程序的地址为:http://www.mongodb.org/downloads ,选择选择的是Windows 32-bit 2.4.0版本。 2.下载MongoDB For .net 驱动开发包,官方的c#driver位于driver菜单下,地址为:https://github.com/mongodb/mongo-csharp-driver/downloads。这里还了解到有samus驱动下载地址:https://github.com/samus/mongodb-csharp 二,安装 1.将mongodb-win32-i386-2.4.0.zip解压到目录E:\mongodb-2.4.0,也就是把Bin目录放在该文件夹下。 2.在E:\mongodb-2.4.0创建Data文件夹,然后在该目录下分别创建db,log两个文件夹,至此E:\mongodb-2.4.0文件目录下有三个文件夹(bin,data,log). 3.在log文件夹下创建一个日志文件log.log,即完全目录为:E:\mongodb-2.4.0\log\log.log. 4. 程序启动方式 进入bin目录,在目录上输入cmd ,回车 弹出CMD窗口 mongod -dbpath "E:\mongodb-2.4.0\data\db" 执行此命令即将mongodb的数据库文件创建到C:\Program Files\mongodb\data\db 目录。 接着将Mongodb安装成windows服务 mongod --logpath "E:\mongodb-2.4.0\log\log.log"  --logappend --dbpath "E:\mongodb-2.4.0\data\db" --directoryperdb --install 测试数据库操作 在bin目录打开 mongo.exe   >help (查看相关信息) >db.foo.insert({test:100}) (往foo表插入test,100字段值,foo表为默认表) >db.foo.find() (查看foo表数据) 结果如下: 可以看到插入了2条记录分别人set,test 其它命令可查阅help命令或官网说明。               遇到的问题解决 ——————————————-- 1. 首先,当然是下载 MongoDB MongoDB的官方网站是:http://www.mongodb.org/, 最新版本下载在:http://www.mongodb.org/downloads 。请注意下载适合自己系统的安装包,我选择的是:Windows 64-bit 2008 R2+。 下载后的文件名称是:mongodb-win32-x86_64-2008plus-ssl-3.0.1-signed.msi ,点击安装。   根据官方文档:http://docs.mongodb.org/manual/tutorial/install-mongodb-on-windows/ Starting in version 2.2, MongoDB does not support Windows XP. Please use a more recent version of Windows to use more recent releases of MongoDB. 大意是:从版本2.2开始,MongoDB不支持Windows XP。请用较新版本的Windows来使用MongoDB的最新版本。     2. 创建数据库文件的存放位置 […]

龙生   04 Apr 2015
View Details