【转】Stack Overflow研发副总裁:.NET技术并不差,合适自己就好
摘要:在QCon纽约大会上, Stack Exchange的工程部副总裁David Fullerton深入解析了如何使用C#、MS SQL等技术支撑Stack Overflow网站的单块应用架构,这个网站每月约有40亿的用户请求。 原文链接:https://www.sdk.cn/news/2378

在QCon纽约大会上, Stack Exchange的工程部副总裁David Fullerton深入解析了如何使用C#、MS SQL等技术支撑Stack Overflow网站的单块应用架构,这个网站每月约有40亿的用户请求。Fullerton在演讲开篇就指出尽管Stack Exchange旗下网站使用的技术架构很平庸,但网站使用如此陈旧技术仍能运行良好的方法却很有趣。Stack Exchange 掌控并运营着几个社区类“问答”风格网站,包括广受欢迎的Stack Overflow开发者问答网站。
Stack Exchange团队完全以远程方式协同工作,即便团队成员在同一地点办公,公司也鼓励员工相互之间仅仅使用远程协同的方式,例如使用即时通讯工具和缺陷跟踪程序。Fullerton 说,正是由于公司保持一种“雇佣聪明员工并不妨碍他们”的心态,从而使系统管理员和全栈工程师组成一个高效团队,共同构建并维持网站平稳运行。
Stack Exchange旗下的网站在设计时都使用了一种升级版单块应用(monolith plus)的架构,几乎所有的应用逻辑都由C#的Web层以及MS SQL数据库实现。这个规则也有一些例外,例如标记相关逻辑已经从单块应用中提取成标记引擎服务,缓存服务则由几台Redis服务器提供,同时ElasticSearch服务器提供全文搜索功能。
开发团队将网站的应用程序部署到两个数据中心,从而增加系统的整体容错能力,纽约机房作为主数据中心,俄勒冈机房作为备援数据中心。开发团队以滚动部署应用的方式更新整个Web层的服务器,这种部署操作每天都会发生,从白天到晚上。新功能的测试由一组真实用户执行,这些测试用户则是由一系列特性标记自动选择出来的。
我们首先会在部分网站上尝试(新功能),并观察运行的情况。这种方法对我们很有效。我们网页的特性是在单个页面上有很高的读负载,而并不像其他网站的页面有那么多个性化的内容,而且我们有一个比较宽容的用户社区。
Stack Exchange的研发理念是“先用我们熟悉的技能,度量问题,修复慢的地方”。最初的开发人员只了解C#和MS SQL,因此我们今天仍在使用这样的开发堆栈。早期的Web应用程序利用到几个现成的工具:ASP.Net MVC,Linq到SQL的转换,MS SQL全文搜索和内置缓存。Fullerton 表示,在Stack Exchange,由于关注客户体验,并考虑到搜索引擎对于性能好的网站会有正向权重,所以性能是一个重要的功能特性。 Stack Exchange通常都会在实际的负载下测试(不允许任何猜测和假设),开发团队会将性能问题当作务必尽快解决的缺陷。
整个网站架构有很好的并发处理能力。我们每月处理40亿次请求,峰值为每秒3000次,每天有8亿次SQL查询,峰值为每秒8500次。
Fullerton说,随着时间的推移,初始技术栈中的主要部分已被取代:引入Redis以提供缓存,添加ElasticSearch以改善全文搜索能力,通过使用定制的中间语言生成框架来替代原有的实体层对象映射方式,从而提高SQL访问的效率,同时兼顾扩展性和新功能需求,从原有的单块应用中抽取出标签相关逻辑,形成独立的标签引擎服务。
工具对于识别和监控性能问题很有帮助,例如miniprofiler可以分析用户请求并检测性能瓶颈,Opserver用于监控,Dapper可以分解追踪请求。Fullerton表示,对性能的关注会带来很多好处。
你可以通过优化性能而提升扩展能力(几乎免费)。单块应用的扩展能力超出你的想象。
Fullerton的结论是,这种升级版单块应用的架构在Stack Exchange非常成功。尽管这种架构可能显得陈旧无聊,但团队坚持这种方式的过程非常有趣。微服务架构的风格可能在当今很流行,但Fullerton警告说,过度使用这种模式,就必须承担这种模式固有的各种SOA开销(SOA tax)。
SOA不是唯一的成功之路。我们要知道自己的问题领域,在解决实际问题的过程中,提取服务去解决实际困难,而不是虚幻地想象各种服务。
【转】Stack Overflow研发副总裁:.NET技术并不差,合适自己就好的更多相关文章
- 翻译 | Qt研发副总裁分享2018年工作计划
原文作者:TuukkaTurunen,高级研发副总裁 翻译校审:Haipeng.Yulong和Ryan 引言:2018年,我们将继续完善Qt 5.9 LTS,现在我们正在为5月份发布Qt 5.11进行 ...
- CTO和技术副总裁应该如何分工?谁才是技术领导者?
谁是初创公司的技术领导者,是CTO还是技术副总裁?任何在创业公司工作的人都知道,我们不应该去问这个问题.因为这两个是非常不同的角色,角色本身会随着创业公司的发展而变化,两者对于业务规模都很重要. 简单 ...
- AdMaster技术副总裁谈Hadoop、营销数据、Python和挖掘平台
http://www.infoq.com/cn/news/2014/09/admaster-hadoop 卢亿雷是现任AdMaster技术副总裁,曾在联想研究院.百度基础架构部.Carbonite C ...
- Amazon前技术副总裁解剖完美技术面试
Amazon前技术副总裁解剖完美技术面试 投递人 itwriter 发布于 2014-03-03 14:30 评论(0) 有1729人阅读 原文链接 [收藏] « » 英文原文:The Anat ...
- 转:Stack Overflow通过关注性能,实现单块应用架构的扩展能力
原文来自于:http://www.infoq.com/cn/news/2015/07/scaling-stack-overflow 在New York QCon 2015大会上,David Fulle ...
- Stack Overflow: The Architecture - 2016 Edition(Translation)
原文: https://nickcraver.com/blog/2016/02/17/stack-overflow-the-architecture-2016-edition/ 作者:Nick Cra ...
- 亚马逊副总裁谈Marketplace平台的个性化服务
说到个性化,亚马逊无疑是挖掘与利用数据为消费者打造个性化网购体验的先驱之一.而现在,几乎所有的公司和网站都在利用更加个性化的推荐算法为用户提供更好的购物和浏览体验. 亚马逊近年来尤其重视将其个性化特性 ...
- Stack Overflow 2016最新架构探秘
这篇文章主要揭秘 Stack Overflow 截止到 2016 年的技术架构. 首先给出一个直观的数据,让大家有个初步的印象. 相比于 2013 年 11 月,Stack Overflow 在 20 ...
- 国内为什么没有好的 Stack Overflow 的模仿者?
国内为什么没有好的 Stack Overflow 的模仿者? 个人觉得, 高端的程序员会直接上stackoverflow提问, 所以国内中文的stackoverflow必然面对低端程序员. 鉴于中国程 ...
随机推荐
- leetcode 之突然不做了
最近心情也不好,学不会的东西太多,以前能懂为什么,现在完全不知道为什么,只能依葫芦画瓢了,所以我写出了的代码到底是会了吗?还是瓢画的好? 热血之三分钟热度小张发现leetcode里会做的好像都做了,剩 ...
- .net core signalR 忽略https 证书
var connection = new HubConnectionBuilder().WithUrl(serverUrl, option => { option.HttpMessageHand ...
- RTOS双向链表数据结构
在学习RTOS操作系统时,在任务优先级设置时用到了双向链表,说实话数据结构的东西只是停留在大学上课阶段,并未实践过,在操作系统中看得云里雾里,遂将其单独拿来了进行了一下思考,经过一个上午的摸索逐渐领会 ...
- 修改ActiveReports验证文字“给不能为 null 的参数指定一个 null 值”
转:http://gcdn.gcpowertools.com.cn/showtopic-13759.html ActiveReports官方网站:http://www.gcpowertools.com ...
- AJPFX的监管与执照
AJPFX受到英国金融行为监管局(FCA)授权和监管. 英国FCA是目前世界上金融服务最完善.最健全的监管机构,英国FCA对所有在其境内注册的金融服务机构进行严格的监管. 英国金融行为监管局(FC ...
- django-ORM相关代码及其sql执行次数
1.普通情况:通过log可以看出,这种情况下,访问了1次数据库 def test(request): """测试连表""" users = ...
- VSCode保存插件配置并使用 gist 管理代码片段
setting sync 保存配置 由于公司和家里都使用 VSCode 作为主要编辑器,同步配置是最紧要的.VSCode 提供了setting sync插件,很方便我们同步插件配置.引用网上教程: 在 ...
- Vue 部署单页应用,刷新页面 404/502 报错
在 Vue 项目中,可以选择 hash或者 history.pushState() 实现路由跳转.如果在路由中使用history模式: export default new Router({ mode ...
- Unity 使用有限状态机 完美还原 王者荣耀 虚拟摇杆
Unity 使用有限状态机 完美还原 王者荣耀 虚拟摇杆 效果如图所示 摇杆的UI组成 如图所示 简单的可以认为摇杆由1.2.3贴图组成 为摇杆的底座 为摇杆的杆 为摇杆的指向 可以理解这就是街机上的 ...
- APP版本升级,测试用例总结
APP升级主要在线升级.离线升级.当有新版本时,提示更新,用户点击更新,下载最新版本,进行安装升级,这种就是在线升级:已有升级包,安装升级包进行升级,这种就是离线升级. 在线升级.离线升级常见测试用例 ...