这些网站很简单,但做开发的都是顶尖高手

站长资源 2021-07-09 13:41www.dzhlxh.cnseo优化

有些网站看起来并不复杂,但是其背后的开发却需要依赖大量的编程高手来进行。以Facebook为例,其员工主要由工程师构成,人数最多的两个团队分别是Engineering和Ops,总计占了Facebook员工总数的一半左右。这些工程师录用之前都需要接受严格的筛选和考核,入职之前还需要先接受4到6周的培训。培训之后的测试也是困难重重,往往还会淘汰掉其中10%的人。最终能够成功留在Facebook内部的大都是来自世界各地的编程高手。为什么像这种看起来并不复杂的网站,却需要大量的顶尖高手来开发呢?来看看知乎上大神们是怎么解释的。

@子柳的回答 7205票

就拿淘宝来说说,当作给新人一些科普。

先说你看到的页面上,最重要的几个:

【搜索商品】——这个功能,如果你有几千条商品,完全可以用select * from tableXX where title like %XX%这样的操作来搞定。但是——当你有10000000000(一百亿)条商品的时候,任何一个数据库都无法存放了,请问你怎么搜索?这里需要用到分布式的数据存储方案,另外这个搜索也不可能直接从数据库里来取数据,必然要用到搜索引擎(简单来说搜索引擎更快)。好,能搜出商品了,是否大功告成可以啵一个了呢?早着呢,谁家的商品出现在第一页?这里需要用到巨复杂的排序算法。要是再根据你的购买行为做一些个性化的推荐——这够一帮牛叉的算法工程师奋斗终生了。

【商品详情】——就是搜索完毕,看到你感兴趣的,点击查看商品的页面,这个页面有商品的属性、详细描述、评价、卖家信息等等,这个页面的每天展示次数在30亿以上,同样的道理,如果你做一个网站每天有10个人访问,你丝毫感觉不到服务器的压力,但是30亿,要解决的问题就多了去了。首先,这些请求不能直接压到数据库上,任何单机或分布式的数据库,承受30亿每天的压力,都将崩溃到完全没有幸福感,这种情况下要用到的技术就是大规模的分布式缓存,所有的卖家信息、评价信息、商品描述都是从缓存里面来取到的,甚至更加极致的一点“商品的浏览量”这个信息,每打开页面一次都要刷新,你猜能够从缓存里面来取吗?淘宝做到了,整个商品的详情都在缓存里面。

【商品图片】——一个商品有5个图片,商品描述里面有更多图片,你猜淘宝有多少张图片要存储?100亿以上。这么多图片要是在你的硬盘里面,你怎么去查找其中的一张?要是你的同学想拷贝你的图片,你需要他准备多少块硬盘?你需要配置多少大的带宽?你们的网卡是否能够承受?你需要多长时间拷贝给他?这样的规模,很不幸市面上已经没有任何商业的解决方案,最终我们必须自己来开发一套存储系统,如果你听说过google的GFS,我们跟他类似,叫TFS。顺便说一下,腾讯也有这样的一套,也叫TFS。

【广告系统】——淘宝上有很多广告,什么,你不知道?那说明我们的广告做的还不错,居然很多人不认为它是广告,卖家怎么出价去买淘宝的广告位?广告怎么展示?怎么查看广告效果?这又是一套算法精奇的系统。

【BOSS系统】——淘宝的工作人员怎么去管理这么庞大的一个系统,例如某时刻突然宣布某位作家的作品全部从淘宝消失,从数据库到搜索引擎到广告系统,里面的相关数据在几分钟内全部消失,这又需要一个牛叉的后台支撑系统。

【运维体系】——支持这么庞大的一个网站,你猜需要多少台服务器?几千台?那是零头。这么多服务器,上面部署什么操作系统,操作系统的内核能否优化?Java虚拟机能否优化?通信模块有没有榨取性能的空间?软件怎么部署上去?出了问题怎么回滚?你装过操作系统吧,优化过吧,被360坑过没,崩溃过没?这里面又有很多门道。

不再多写了,除了上面提到的这些,还有很多很多需要做的技术,当然并不是这些东西有多么高不可攀,任何复杂的庞大的东西都是从小到大做起来的,里面需要牛叉到不行的大犇,也需要充满好奇心的菜鸟,最后这一句,你当我是别有用心好了。

@覃超的回答 431票

功能上面虽然不复杂,但是要完成的细节却很多. 比如news feed里面的推荐算法就很重要,要根据用户之前的记录和与好友的关系来生成. 另外就是根据用户的信息和行为,要做机器学习和数据挖掘,从而来挑出最匹配的广告.这也是比较花人力的事情.

另外Facebook的用户量奇大无比. 假设你只是做一个学校内部用的社交网站, 那肯定很简单. 但是如果考虑到上亿人在上面用. 你首先服务器就必须是一个分布式的机群,还要保证能抗住那么大的流量. 同时为了性能够好,不得不加上mem cache和网页分块加载等功能. 还有就是每天用户产生的总数据量(状态,留言,照片,分享等)有TB的数量级,你数据库是否撑住等等.

另外树大招风,你要一个很强的安全小组来保证网站在受攻击的时候能防御好,还有要防止垃圾信息和恶心广告或者程序的散播. 另外还有为了全球化而带来的多语言问题.

总之,一个网站做大了之后,很多问题就会产生,不是在校园里面做一个学期作业那么简单.

@天光的回答 126票

首先支持和赞成@子柳 和@覃超 的答案,他们都从实际的案例上有力得说明了问题的难度所在,我只是锦上添花,展开来说一下。

不单局限于网站,对于所有的软件来说,从软件工程学的角度来说,其需求大体可以分为功能性需求(functional Requirements)和非功能性需求(nonfunctional Requirements)两个大的部分。

功能性需求,一般是我们显性易见的,就是一般实现了什么功能,提供了什么服务,大体我认为问题中提到,或者我们日常所说的:“看起来复杂不复杂”,基本上都会是针对功能性需求而言的。如果拿google的搜索服务举例来说,那就是:

提供一个输入框, 提供一个按钮,用户在输入框里输入关键字,按了按钮以后,可以搜索出相应结果。

功能性需求,会因为不同的网站,不同的软件,不同的业务和使用目的,大相径庭,五花八门,不一而论。

非功能性需求,以下应用维基百科的定义(虽然有些晦涩和绕口,但是我认为是比较精到和准确的)

在系统工程及需求工程中,非功能性需求(Non-functional requirement)是指依一些条件判断系统运作情形或其特性,而不是针对系统特定行为的需求。和非功能性需求相对的是功能需求,后者会定义系统特定的行为或功能。非功能性需求也可以视为为了满足客户业务需求而需要符合,但又不在功能需求以外的特性。

Copyright © 2016-2025 www.dzhlxh.cn 金源码 版权所有 Power by

网站模板下载|网络推广|微博营销|seo优化|视频营销|网络营销|微信营销|网站建设|织梦模板|小程序模板