洪强宁及其技术团队在网站架构
洪强宁及其技术团队在网站架构、性能、可伸缩性上有着深入研究。他们始终致力于用技术改善人们的文化和生活品质,用自己的技术口味去传播分享更好的技术。
加入豆瓣
2005年初,阿北在啄木鸟社区发出豆瓣网上线的通知,那时洪强宁加入啄木鸟社区,并学习使用Python已经有三年时间了。
与同龄人相比,因为受学计算机的哥哥的影响,洪强宁上小学时就开始接触计算机,并且很早就有写程序的爱好,并确定了做软件研发工作的方向。在清华的开放实验室里(全国最早允许学生访问互联网的地方),洪强宁接触到了大量国外的网站和技术。那是“我技术能力成长最快的时间”,洪强宁说。大四时候,洪强宁开始了解Linux,学习和使用了后来在豆瓣广泛使用的Gentoo,由此对开源软件产生了浓厚的兴趣,并参与到一些开源项目中去。
清华毕业后,洪强宁一直做嵌入式系统。出于对软件开发的喜爱,他在2002年开始接触Python语言,但只是业余时间才用Python做一些东西。进入第二家公司后,洪强宁在负责新的项目技术选型时,完全采用了Python语言,并应用在嵌入式XP系统上。就这样他逐步完成了硬件工程师到软件工程师的转变,也让洪强宁对一种语言在计算机底层如何工作有了深入的理解,从此无论是工作还是业余项目都使用Python。
2004年8月啄木鸟社区开始运营,这是由黄冬发起的Python语言社区,同在社区里活跃的洪强宁,最终被寻找技术伙伴的阿北发现,经过几次沟通,洪强宁成为豆瓣第一位全职员工。
洪强宁评论这次经验时说,选择一种技术,其实也在被技术选择,进入到和自己有相同技术味儿的圈子。他评价之所以会和阿北共事,也是因为两人在技术口味上有相似的地方,比如同样热爱开源,喜欢Python和Gentoo等等。
除了Python以外,工作中还需要应用的其他技术,如数据库、缓存、分布式系统等等,这些都是洪强宁之前很少接触的,全部在工作中一边做一边学起来。
因为参与社区而加入豆瓣的洪强宁,也与社区一同成长,虽然作为话题参与者的机会减少了,但作为社区建设者的比重却在增加。进入豆瓣的员工很多也都是从Python社区而来,豆瓣也支持员工参与社区讨论,并组织了多次啄木鸟社区的线下活动,而且接管了社区服务器,以至在中国提到Python,几乎到了不能不提豆瓣的地步。可以说,豆瓣成为国内互联网使用Python语言的一面旗帜。
到豆瓣做改变
洪强宁来到豆瓣前,阿北已经形成了目前豆瓣整套的服务架构,并考虑了未来规模扩大后的影响。
那么洪强宁来到豆瓣之后将如何做呢?
除了负责系统平台、提供技术设施和保证系统运维外,洪强宁及其领导的团队,将阿北原有的架构体系中的所有部分都改造成分布式的,包括架构、数据库、缓存和应用服务器,并开发工具软件去简化管理和维护的问题。原有的技术选型,也不总是能满足不断增长的性能要求,MySQL对服务的支持存在问题,于是他们自己开发了Beans DB。最早使用的是单机服务器,还没有消息队列的概念,这也是后来才加入的。
就这样,豆瓣的改变一步步得以实现,并和技术创新一起持续着。
2007年11月13日,豆瓣用户达到一百万。洪强宁表示,那时压力的确很大,做技术的只有两三个人,大家总是跟在事件之后跑,还没有时间去考虑技术储备,常常是发生什么问题,就赶紧去查找原因,然后设计解决方案,熬夜成了家常便饭。随着公司的技术人员慢慢增多,特别是将分布式的架构实现后,这种紧张的状况才有了好转,洪强宁开始考虑一些未来的情况,比如用户量到达一定量级时数据库的改进。做Beans DB的想法就是那时提出来的。2008年开始设计、讨论,并在2009年部署到豆瓣的部分产品中了。
当被问到为何不在旧技术上做优化,而要提出新的解决方案时,洪强宁说,技术选型必须能满足需求,否则就是白谈。当若干技术方案都能满足需求时,豆瓣会采用集体决策的方式,大家一起讨论出结论,最后授予某个人去实现。并且在复杂和简单的技术之间,豆瓣倾向于选择后者,哪怕它不完美。Beans DB的作者Davis就是一个典型,他喜欢用极端简单的东西来解决技术问题。
早期架构的分布式转变完成后,洪强宁又遇到了未曾预想的变化。最为典型的是业务模式发生了很大转变,原来是主站,发展到后来包括社区、图书、电影、音乐四个相对分开的站点,导致开发方式也发生了很大的变化,团队面临很多网站需要开发维护的情况。洪强宁坦言,如何把以往的技术积累下来,转变成可适用于多个网站的技术产品,是目前摆在自己面前最核心的问题。
出于对豆瓣整体结构透彻的了解,洪强宁逐步走向技术管理者的岗位。他强调要发挥员工的主观能动性,而不是从上面压任务,让每个员工自己去发现什么是重要的,什么是应该做的,自己则更多担负起协调者的责任,给他们提供资源。正如他所欣赏的Linus Torvolds所言。“努力寻找可以信任的人,然后让他们放手去干……一旦我让某人负责维护某个项目,此人一定会拥有处理好日常事务的能力。”
员工的情况各有不同,如何保证人人都能自觉发挥工作中的能力呢?洪强宁解释说,他们把大量的精力放在招人上面,尽量使招进来的人是靠谱、愿意主动做事的。花大力气在招人上,带来的好处是可以省掉很多管理的琐事,只要让员工了解发展方向是怎样的、目标是怎样的。至于目标怎么完成,他自己会想办法找到最好的路径。
豆瓣气质
采访中,洪强宁提到一个词,“豆瓣气质”。
豆瓣招人的时候,无论笔试、面试,更多在考察这个人,第一技术基础是不是扎实;第二对于问题思考是否敏捷;第三除了职业修养,还包括对生活本身是否有热情,是否有奉献和共享的精神。所有这些都归结成一点,是否具有“豆瓣气质”。
如何描述这样一种气质呢?
洪强宁说,在豆瓣工作的人,不是说为谋生找了一份工作,写段代码拿工资回家吃饭,而要有追求和理想。而他自己无疑是具有豆瓣气质的典型,这正是如此,洪强宁身边聚合一群热爱技术和生活的人,他们始终致力于用技术改善人们的文化和生活品质,用自己的技术口味去传播分享更好的技术,推动中国互联网的发展。
洪强宁及其技术团队在网站架构相关推荐
- 【转】洪强宁:从程序员到架构师,从架构师到 CTO
在文章开头,先介绍一位技术专家:洪强宁,爱因互动创始人 &CTO 洪强宁,11 年互联网从业经验,商用对话机器人创业中.前豆瓣首席架构师,前宜信大数据创新中心首席架构师,资深 Python 开 ...
- springcloud全局过滤_微服务技术SpringCloud 互联网网站架构演变过程
网站架构演变过程 传统架构 传统的SSH架构,分为三层架构 web控制层.业务逻辑层.数据库访问层. 传统架构也就是单点应用,就是大家在刚开始初学JavaEE技术的时候SSH架构或者SSM架构,业务没 ...
- 基于Java技术的大型网站架构设计方案
架构设计漫长路 最佳实践我来数 千万并发没问题 要点首推数据库 SQL语句要优化 索引创建有艺术 三大范式不可废 冗余字段难维护 查询过多怎么办 缓存使用是本固 频繁访问不用怕 每秒数千扛得住 更新插 ...
- 豆瓣首席架构师洪强宁谈Python语言
在4月23日至25日召开的QCon Beijing 2010大会上, 来自豆瓣网的洪强宁为与会开发者分享了Python语言用于Web 2.0网站开发的经验.豆瓣网从开发初期,便选用Python作为主要 ...
- 大型网站电商网站架构案例和技术架构的示例
大型网站架构是一个系列文档,欢迎大家关注.本次分享主题:电商网站架构案例.从电商网站的需求,到单机架构,逐步演变为常用的,可供参考的分布式架构的原型.除具备功能需求外,还具备一定的高性能,高可用,可伸 ...
- 大型电商网站架构案例和技术架构【推荐】
大型网站架构是一个系列文档,欢迎大家关注.本次分享主题:电商网站架构案例.从电商网站的需求,到单机架构,逐步演变为常用的,可供参考的分布式架构的原型.除具备功能需求外,还具备一定的高性能,高可用,可伸 ...
- 大型电商网站架构分析
电商网站架构案例.从电商网站的需求,到单机架构,逐步演变为常用的,可供参考的分布式架构的原型.除具备功能需求外,还具备一定的高性能,高可用,可伸缩,可扩展等非功能质量需求(架构目标). 根据实际需要, ...
- 大型分布式网站架构总结
本文是学习大型分布式网站架构的技术总结.对架构一个高性能.高可用.可伸缩及可扩展的分布式网站进行了概要性描述,并给出一个架构参考.文中一部分为读书笔记,一部分是个人经验总结,对大型分布式网站架构有较好 ...
- 大型网站架构系列:电商网站架构案例(2)
电网网站架构案例系列的第二篇文章.主要讲解网站架构分析,网站架构优化,业务拆分,应用集群架构,多级缓存,分布式Session. 五.网站架构分析 根据以上预估,有几个问题: 需要部署大量的服务器,高峰 ...
最新文章
- php http_get_vars,$_GET($HTTP_GET_VARS)和$_POST($HTTP_POST_VARS)的区别
- JavaScript 开发者最期待的年度大会,惊喜不断,错过还要等好久!
- 导出勾选密码永不过期的AD账户信息
- Mac电脑设置adb环境变量
- AI 云原生浅谈:好未来 AI 中台实践
- CORS 请求未能成功_CORS攻击概述
- 【转】刨根究底字符编码【2.0版】(1):开篇
- Android 之父裁员 30%:开发者如何避免“被离职”?
- java中一直gc_如果JVM在执行GC时一直在移动对象,那么它如何解析引用?
- DB2 表的常用命令
- .NET开发不可错过的25款必备工具,徐汇区网站设计
- 员工说不用兼容老文件,当主管的就信了?
- java权限管理selor_Java进阶学习第四天——DOM入门
- 开源 CMS系统 / SNS系统 / BBS系统
- blast2go本地安装,一个防火墙设置引发的血案
- 光无线通信理论知识学习1
- python小玩意——抠图换背景
- qt 进程打开excel_Qt 操作Excel
- c语言中循环体表达式,C语言的循环语句
- 个人总结 高阶PLSQL 数据库编程
热门文章
- 虚拟化技术 — 硬件辅助的虚拟化技术
- python对象模型_python 实现对象模型
- Verilog实现正弦波、三角波、方波、锯齿波的输出
- 云原生Java架构师——KubeSphere DevOps流水线部署RuoyiCloud
- 南宁第一职业技术学校计算机专业,南宁第一职业技术学校
- 【学习笔记】CSW网络目录服务
- 阿里巴巴《Linux命令行与shell脚本编程大全》高清版 PDF 开放下载
- 通过Google+设置壁纸报错
- Smalltalk for Everyone Else
- 说一下“==“和equals方法究竟有什么区别?