分享系列--面试JAVA架构师--链家网
本月7日去了一趟链家网面试,虽然没有面上,但仍有不少收获,在此做个简单的分享,当然了主要是分享给自己,让大家见笑了。因为这次是第一次面试JAVA网站架构师相关的职位,还是有些心虚的,毕竟之前大部分时间都是在做.NET相关的技术工作,并且自己所负责过的项目规模都是比较小,并且差异也较大。在高并发性,高伸缩性的互联网网站的架构方面没有太多的经验,只是在之前空闲时阅读李智慧老师的《大型网站技术架构》一书给了我不少的启发。面试过程比较简单,首先是笔试,架构师职位主要是一些知识的理解,也有一些数据库查询方面的基础试题。知识点方面比较偏重于NoSQL、缓存服务器集群、Session服务器等内容。大体做的还凑合,因此面试官也比较客气,和我更加深入的聊了相关方面的知识,也包括该公司主要的组织架构和盈利来源。
由于链家网到目前为止仍然不算特别出名,但在各大网站上已经能经常看到该公司基于房地产行业的研究报告。刚开始我最大的疑问就是这个公司和搜房网、安居客等有什么区别?这些网站都已经存在多年,那么该公司有什么特别的地方可以存活至今,并在这两年内发展迅速?在回答这些疑问之前,我稍微跑个题,介绍一下面试官老宋,这是我给他起的外号,那次见面应该是第一次也是最后一次见他了,但他给我留下了极深的印象。技术水平很高,很注意自己的外在气质,沟通时十分和善,影响最深的是在面试时他全程用钢笔记录相关的信息,非常的专业和尊重面试者。之所以提这个,主要是想说个人认为程序员在找一份工作时除了收入,公司的未来发展外,最重要的就是直属领导的性格契合度了,适合的才是最好的。只有这样,你才能无论遇到多大的困难,都坚信团队、项目能顺利发展,自己多奉献一些也是值得的,当然最终受益的也是自己了。
接下来,回答之前的问题,链家网是非常大型与房地产经纪相关的公司,组织架构比较复杂和特殊,因为他并不是一家企业慢慢发展起来的,而又由链家网牵头,和各地不同的房产经纪公司联合组建起来的。由于房地产政策的地区差异,各地客户群体需求差异,很难有一个非常统一的运营模式来进行管理。各地公司单独运营,总部主要是一个互联网的用户入口,数据信息服务系统也是各自独立,感觉比较像原来特许加盟的形式,也算是一种互联网+的实践了。该公司与搜房网、安居客的差异来源于它的数据完全来之于本公司,基本是真实有效的,而搜房网等公司的数据来源于各个房产经纪公司或者经纪人,信息非常的不可靠。简单举个例子,比如一套房子房东报价500万,但一般来说这里面都有一定的砍价空间,那么房产经纪人在网上挂售这套房产时就会进行一定的减价,比如说495万,于此同时,房东一般会和多家经纪公司联系,那么其他经纪人看到这个报价,为了做成生意,很自然的把价格报的更低,最后,甚至爆出400万这种不可能成交的价格,只是为了接到潜在购买者的电话。这样就形成了"劣币驱逐良币"的情况,使得网站信息不再可信,同时由于一套房屋可以由多家经纪公司挂售,因而网站上的房源数量往往远多于实际的数量,给潜在购买者产生了很大的困扰。此外,由于链家公司所辖房产经纪公司,比如说上海的德佑公司,已有一定的体量,为了更进一步的保证房产的真实性,经过房产局对在售房屋进行了全面的核查。借用老宋的话说就是,"搜房他们是淘宝,链家是京东"。以上是对该公司经营模式的介绍,对房产经纪类企业深入互联化有很大的借鉴作用。
然后开始技术部分的介绍,刚开始我也有很打困惑,为什么这家公司需要一个OA方面的架构师,经过沟通我才知道,该公司目前有大约3万名的房产经纪,所以该公司的企业信息系统,每天有将近1000万得PV,抵得上一个中型网站,每天的早上打卡(采用网上打卡)、争抢客户资源等活动会产生大量的并发,类似于电商网站的秒杀,因而需要有高并发相关经验的工程师。
最后,是几个主要的技术点,包括权限系统的设计,缓存服务器集群的架设,消息队列系统的构建等。在此主要介绍前两个,其他的会在之后补充。权限系统基本参考资深博主天空行马的方案,如下图所示。
主体结构比较简单,职位和项目组的设置可以同时满足职能型和项目型的企业组织架构,角色则对之前两者进行了有限的补充,比如系统管理员等不能通过职位和项目组描述的情况。一般来说,系统中包含两种类型的权限:模块的权限;行为的权限。权限组通常用于表示某一模块中所有行为权限的集合。这个思路简单清晰,便于实现和未来的扩展。在实现中,可以通过相关的权限代码组合规则
来将权限信息保存在数据库中,例如权限的数字或字母的表示组合。
分布式缓存集群的伸缩性不同于Web服务器集群的伸缩性,对于后者来说,每一台Web服务器上内容相同,伸缩性只需要简单的负载均衡算法即可达到。但每一台分布式缓存服务器上数据各不相同,缓存访问请求不可以再集群中任意服务器上完成,需要先找到存储该数据的服务器后访问。同时新上线的服务器上没有缓存数据,下线的缓存服务器上有热点数据,会对分布式缓存集群的伸缩性设计造成很大的困难。为了更好的阐述相关概念,接下来将以最常见的Memcached为例介绍相关设计与实现,所图所示。
过程非常简单,Memcached API将应用程序传入的key进行哈希运算,然后使用简单余数Hash算法(例如11/3=2),得到指定的节点Node2,然后存储指定服务器。需要注意的一旦涉及到服务器的扩容,以上见余数Hash算法就会遇到很大的问题,例如当要将3台缓存服务器增加到4台时(11/4=3),这时再Node3上找不该缓存,缓存未命中的概率达到75%,并且会着扩容,为命中的概率不断增大(N/N+1)。这时就会使用到比较流行的一致性hash算法,该算法通过一致性Hash环的数据结构实现KEY到缓存服务器的Hash映射,过程若下图所示。
算法的具体过程为:首先构造一个232的整数环,根据节点名称的Hash值(极可能的散列)将缓存服务器节点防止在这个Hash环上,然后计算需要缓存数据KEY的Hash值,顺时针查找最近的节点,作为目标节点。如上图中,在集群扩容时,即在原有Node0-2的基础上加入Node3,可以看到,唯一受影响的数据为Key3,如此缓存的命中率就变为了N/N+1,能满足实际需要。实际代码中,该还一般由二叉查找树实现,通过链接最外侧的叶子节点形成环。但以上设计仍然存在一个问题,就是再扩容后,Node0和1的负载量是Node2和Node3的两倍。解决该痛点的方法是将物理缓存服务器节点虚拟化为N个虚拟节点,均匀的分散到环中去,使得负载尽可能的均衡。这样就做到了新增物理服务器对原有物理服务器的影响一致,也就是该算法名称的由来。
注:本文主要供自己学习,不妥之处望见谅。
参考资料:
[1]天空行马. OA系统权限管理设计方案[EB/OL]. http://www.cnblogs.com/kivenhou/archive/2009/10/19/1586106.html。
[2]李智慧. 大型网站架构技术[M]. 上海:电子工业出版社, 2012. 106-112
分享系列--面试JAVA架构师--链家网的更多相关文章
- 分享一份Java架构师学习资料,2019年最新整理!
分享一套不错的架构师学习参考资料,免费领取的,无任何套路! 关注Java大后端公众号,在后台回复关键字:大大,即可免费领取,觉得资料不错,转发给其他朋友呗- 长按关注Java大后端公众号领取.
- 十年Java架构师分享
看到一篇十年java架构师分享需要掌握的技术点,有时间对照一下,好好学习一下. ------------------------------------------------------------ ...
- 阿里巴巴十年Java架构师分享,会了这个知识点的人都去BAT了
1.源码分析专题 详细介绍源码中所用到的经典设计思想,看看大牛是如何写代码的,提升技术审美.提高核心竞争力. 帮助大家寻找分析源码的切入点,在思想上来一次巨大的升华.知其然,并知其所以然.把知识变成自 ...
- [转]阿里巴巴十年Java架构师分享,会了这个知识点的人都去BAT了
1.源码分析专题 详细介绍源码中所用到的经典设计思想,看看大牛是如何写代码的,提升技术审美.提高核心竞争力. 帮助大家寻找分析源码的切入点,在思想上来一次巨大的升华.知其然,并知其所以然.把知识变成自 ...
- Java架构师必看,超详细的架构师知识点分享!
在Java程序员行业中,有不少Java开发人员的理想是成为一名优秀的Java架构师,Java架构师的主要任务不是从事具体的软件程序的编写,而是从事更高层次的开发构架工作.他必须对开发技术非常了解,并且 ...
- 最新咕咆+鲁班+图灵+享学+蚂蚁+硅谷+源码 Java架构师资料《Java架构师VIP课程》
最新的Java架构师完整资料,完整视频+源码+文档. 每一套都是一百多个G的资料,无密. JAVA架构师全套课程 咕泡学院互联网架构师第一期 咕泡学院互联网架构师第二期 咕泡学院互联网架构师第三期 博 ...
- 【jframe】Java架构师之路 - 第01篇:Get Started
jframe是什么? jframe是一个基于MIT协议开源的java web应用程序框架,汇聚了我们团队之于java web应用程序的核心架构思想以及大量最佳实践,并且持续在实际项目中不断完善优化. ...
- 十年阿里java架构师的六大设计原则和项目经验
先看一幅图吧: 这幅图清晰地表达了六大设计原则,但仅限于它们叫什么名字而已,它们具体是什么意思呢?下面我将从原文.译文.理解.应用,这四个方面分别进行阐述. 1.单一职责原则(Single Res ...
- TOP100summit:【分享实录】链家网大数据平台体系构建历程
本篇文章内容来自2016年TOP100summit 链家网大数据部资深研发架构师李小龙的案例分享. 编辑:Cynthia 李小龙:链家网大数据部资深研发架构师,负责大数据工具平台化相关的工作.专注于数 ...
随机推荐
- PHP-Mysqli扩展库的预编译
(1)预编译的好处 假如要执行100条类似的sql语句,每一次执行,在MySQL端都会进行一次编译,效率很低.提高效率的方法就是--减少编译的次数. 先制造一个sql语句的模板,在MySQL端预先编译 ...
- (转)深度分析Linux下双网卡绑定七种模式
现在一般的企业都会 使用双网卡接入,这样既能添加网络带宽,同时又能做相应的冗余,可以说是好处多多.而一般企业都会使用linux操作系统下自带的网卡绑定模式,当然现在 网卡产商也会出一些针对window ...
- asp.net core 使用protobuf
在一些性能要求很高的应用中,使用protocol buffer序列化,优于Json.而且protocol buffer向后兼容的能力比较好. 由于Asp.net core 采用了全新的MiddleWa ...
- berkeley db 内存池 LRU算法
priority based lru in src/mp/mp_fget.c, __memp_fget(), 初始化 一个page buffer时, 设置其 priority: bhp->pri ...
- 在VS2010下编译和使用tesseract_ocr识别验证码
对于自动识别验证码,使用trsseract是个不错的选择,有兴趣的的朋友可以试试. 编译tesseract 官网提供了vs2008的编译说明和工程,但在vs2010下的编译时基本相同的,因此我使用的方 ...
- cent7内核升级4.9
一.手动档 手动档就是从源码开始编译内核安装,好处是可以自己选择任意版本的内核,缺点就是耗时长,编译安装消耗系统资源 1.1.获取 kernel 源码 这世界上最伟大的 Linux 内核源码下载地址是 ...
- poj1083
The famous ACM (Advanced Computer Maker) Company has rented a floor of a building whose shape is in ...
- C#设置打开新窗口的位置
C#打开窗口的位置的位置设置 引入命名空间using System.Drawing; 一.如果是打开在显示器正中间则很简单: Form对象.StartPosition = FormStartPosit ...
- SqlServer2012 数据库的同步之发布+订阅
文章参考了百度过的文章,因为版本不同,操作中也遇到了很多问题,现在整理一下,希望对各位朋友有所帮助. 发布订阅份为两个步骤:1.发布.2订阅.首先在数据源数据库服务器上对需要同步的数据进行发布,然后在 ...
- .NET Mvc Razor也可以这样玩!
忙碌的工作总是占据了生活的大部分的时间!所以我的博客到现在还是寥寥的几篇文章,技术是用来分享和学习的,对技术有不同的见解,大家都可以分享下,如果如下文章有问题之处请各位指出来,在这个闲下来的时间给大家 ...