科百科
当前位置: 首页 范文大全

常见的服务端架构面试(65架构模板开发层)

时间:2023-07-05 作者: 小编 阅读量: 3 栏目名: 范文大全

程序员瓶颈突破架构师➕架构设计的理论与实践

每个程序员都有一个成为架构师的梦想,奈何手里无枪无法点燃心中奇梦。本系列文章分享如何让你手里有枪,只要努力,技术的梦想一定能实现,这应该是众多梦想中离地表最近的一个。

开发层技术开发框架

互联网业务发展的特点:复杂度越来越高。复杂度增加的典型现象就是系统越来越多,不同的系统由不同的小组开发。如果每个小组用不同的开发框架和技术,则会带来很多问题,典型的问题有:

  • 技术人员之间没有共同的技术语言,交流合作少。
  • 每类技术都需要投入大量的人力和资源并熟练精通。
  • 不同团队之间人员无法快速流动,人力资源不能高效的利用。

所以,互联网公司都会指定一个大的技术方向,然后使用统一的开发框架。例如,Java相关的开发框架SSH、SpringMVC、Play,Ruby的Ruby on Rails,PHP的ThinkPHP,Python的Django等。使用统一的开发框架能够解决上面提到的各种问题,大大提升组织和团队的开发效率。

对于框架的选择,有一个总的原则:优选成熟的框架,避免盲目追逐新技术!原因有:

  1. 成熟的框架资料文档齐备,各种坑基本上都有人踩过了,遇到问题很容易通过搜索来解决。
  2. 成熟的框架受众更广,招聘时更加容易招到合适的人才。
  3. 成熟的框架更加稳定,不会出现大的变动,适合长期发展。
Web服务器

开发框架只是负责完成业务功能的开发,真正能够运行起来给用户提供服务,还需要服务器配合。独立开发一个成熟的Web服务器,成本非常高,况且业界又有那么多成熟的开源Web服务器,所以互联网行业基本上都是“拿来主义”,挑选一个流行的开源服务器即可。大一点的公司,可能会在开源服务器的基础上,结合自己的业务特点做二次开发,例如淘宝的Tengine,但一般公司基本上只需要将开源服务器摸透,优化一下参数,调整一下配置就差不多了。

选择一个服务器主要和开发语言相关,例如,Java的有Tomcat、JBoss、Resin等,PHP/Python的用Nginx,当然最保险的就是用Apache了,什么语言都支持。你可能会担心Apache的性能之类的问题,其实不用过早担心这个,等到业务真的发展到Apache撑不住的时候再考虑切换也不迟,那时候你有的是钱,有的是人,有的是时间。

容器

容器是最近几年才开始火起来的,其中以Docker为代表,在BAT级别的公司已经有较多的应用。传统的虚拟化技术是虚拟机,解决了跨平台的问题,但由于虚拟机太庞大,启动又慢,运行时太占资源,在互联网行业并没有大规模应用;而Docker的容器技术,虽然没有跨平台,但启动快,几乎不占资源,推出后立刻就火起来了,预计Docker类的容器技术将是技术发展的主流方向。

千万不要以为Docker只是一个虚拟化或者容器技术,它将在很大程度上改变目前的技术形势:

  • 运维方式会发生革命性的变化:Docker启动快,几乎不占资源,随时启动和停止,基于Docker打造自动化运维、智能化运维将成为主流方式。
  • 设计模式会发生本质上的变化:启动一个新的容器实例代价如此低,将鼓励设计思路朝“微服务”的方向发展。

例如,一个传统的网站包括登录注册、页面访问、搜索等功能,没有用容器的情况下,除非有特别大的访问量,否则这些功能开始时都是集成在一个系统里面的;有了容器技术后,一开始就可以将这些功能按照服务的方式设计,避免后续访问量增大时又要重构系统。

服务层技术

互联网业务的不断发展带来了复杂度的不断提升,业务系统也越来越多,系统间相互依赖程度加深。比如说为了完成A业务系统,可能需要B、C、D、E等十几个其他系统进行合作。从数学的角度进行评估,可以发现系统间的依赖是呈指数级增长的:3个系统相互关联的路径为3条,6个系统相互关联的路径为15条。服务层的主要目标其实就是为了降低系统间相互关联的复杂度。

配置中心

配置中心就是集中管理各个系统的配置。当系统数量不多的时候,一般是各系统自己管理自己的配置,但系统数量多了以后,这样的处理方式会有问题:

  • 某个功能上线时,需要多个系统配合一起上线,分散配置时,配置检查、沟通协调需要耗费较多时间。
  • 处理线上问题时,需要多个系统配合查询相关信息,分散配置时,操作效率很低,沟通协调也需要耗费较多时间。
  • 各系统自己管理配置时,一般是通过文本编辑的方式修改的,没有自动的校验机制,容易配置错误,而且很难发现。

例如,我曾经遇到将IP地址的数字0误敲成了键盘的字母O,肉眼非常难发现,但程序检查其实就很容易。

实现配置中心主要就是为了解决上面这些问题,将配置中心做成通用的系统的好处有:

  • 集中配置多个系统,操作效率高。
  • 所有配置都在一个集中的地方,检查方便,协作效率高。
  • 配置中心可以实现程序化的规则检查,避免常见的错误。比如说检查最小值、最大值、是否IP地址、是否URL地址,都可以用正则表达式完成。
  • 配置中心相当于备份了系统的配置,当某些情况下需要搭建新的环境时,能够快速搭建环境和恢复业务。

整机磁盘坏掉、机器主板坏掉……遇到这些不可恢复的故障时,基本上只能重新搭建新的环境。程序包肯定是已经有的,加上配置中心的配置,能够很快搭建新的运行环境,恢复业务。否则几十个配置文件重新一个个去Vim中修改,耗时很长,还很容易出错。下面是配置中心简单的设计,其中通过“系统标识hostport”来标识唯一一个系统运行实例是常见的设计方法:

服务中心

当系统数量不多的时候,系统间的调用一般都是直接通过配置文件记录在各系统内部的,但当系统数量多了以后,这种方式就存在问题了。比如说总共有10个系统依赖A系统的X接口,A系统实现了一个新接口Y,能够更好地提供原有X接口的功能,如果要让已有的10个系统都切换到Y接口,则这10个系统的几十上百台机器的配置都要修改,然后重启,可想而知这个效率是很低的。

除此以外,如果A系统总共有20台机器,现在其中5台出故障了,其他系统如果是通过域名访问A系统,则域名缓存失效前,还是可能访问到这5台故障机器的;如果其他系统通过IP访问A系统,那么A系统每次增加或者删除机器,其他所有10个系统的几十上百台机器都要同步修改,这样的协调工作量也是非常大的。

服务中心就是为了解决上面提到的跨系统依赖的“配置”和“调度”问题。

服务中心的实现一般来说有两种方式:服务名字系统和服务总线系统。

  • 服务名字系统(Service Name System)看到这个翻译,相信你会立刻联想到DNS,即Domain Name System。没错,两者的性质是基本类似的。DNS的作用将域名解析为IP地址,主要原因是我们记不住太多的数字IP,域名就容易记住。服务名字系统是为了将Service名称解析为“hostport接口名称”,但是和DNS一样,真正发起请求的还是请求方。基本的设计如下:
  • 服务总线系统(Service Bus System)看到这个翻译,相信你可能立刻联想到计算机的总线。没错,两者的本质也是基本类似的。相比服务名字系统,服务总线系统更进一步了:由总线系统完成调用,服务请求方都不需要直接和服务提供方交互了。基本的设计如下:

“服务名字系统”和“服务总线系统”简单对比如下表所示:

消息队列

互联网业务的一个特点是“快”,这就要求很多业务处理采用异步的方式。例如,大V发布一条微博后,系统需要发消息给关注的用户,我们不可能等到所有消息都发送给关注用户后再告诉大V说微博发布成功了,只能先让大V发布微博,然后再发消息给关注用户。

传统的异步通知方式是由消息生产者直接调用消息消费者提供的接口进行通知的,但当业务变得庞大,子系统数量增多时,这样做会导致系统间交互非常复杂和难以管理,因为系统间互相依赖和调用,整个系统的结构就像一张蜘蛛网,如下图所示。

消息队列就是为了实现这种跨系统异步通知的中间件系统。消息队列既可以“一对一”通知,也可以“一对多”广播。以微博为例,可以清晰地看到异步通知的实现和作用,如下图所示。

对比前面的蜘蛛网架构,可以清晰地看出引入消息队列系统后的效果:

  • 整体结构从网状结构变为线性结构,结构清晰。
  • 消息生产和消息消费解耦,实现简单。
  • 增加新的消息消费者,消息生产者完全不需要任何改动,扩展方便。
  • 消息队列系统可以做高可用、高性能,避免各业务子系统各自独立做一套,减轻工作量。
  • 业务子系统只需要聚焦业务即可,实现简单。

消息队列系统基本功能的实现比较简单,但要做到高性能、高可用、消息时序性、消息事务性则比较难。业界已经有很多成熟的开源实现方案,如果要求不高,基本上拿来用即可,例如,RocketMQ、Kafka、ActiveMQ等。但如果业务对消息的可靠性、时序、事务性要求较高时,则要深入研究这些开源方案,否则很容易踩坑。开源的用起来方便,但要改就很麻烦了。由于其相对比较简单,很多公司也会花费人力和时间重复造一个轮子,这样也有好处,因为可以根据自己的业务特点做快速的适配开发。

    推荐阅读
  • 什么情况下会导致退税审核不通过或者退税失败?

    什么情况下会导致退税审核不通过或者退税失败?

  • 福寿千层肉(怎样做福寿千层肉)

    下面希望有你要的答案,我们一起来看看吧!福寿千层肉食材:带皮五花肉1000克、农家干菜50克、红萝卜200、白萝卜200克、西兰花150克、植物油100克、盐10克、味精5克、碎干椒5克、姜50克、葱50克、香料少许。将煨好的五花肉切成薄片,扣入碗内。将农家干菜泡发后,下锅炒香,放在五花肉上,上笼蒸约半小时,取出扣入盘中。盘边用入好味的红白萝卜、西兰花围好即成。

  • 螃蟹怎么弄死(怎么弄死螃蟹)

    以下内容希望对你有帮助!螃蟹怎么弄死首先用剪刀或者筷子戳进螃蟹的两眼之间,让螃蟹处于假死状态,然后将螃蟹腹部的排泄处打开并去掉,从折断处可以将整个螃蟹直接打开,接着分离出蟹壳和蟹身。再彻底清除掉两侧的腮、蟹肺以及三角形的胃,最后用刷子做最后的清洁工作,再根据烹饪需求切成合适的大小就可以了。

  • 货车轮胎气压多少(根据所拉货物来定)

    跟着小编一起来看一看吧!货车轮胎气压多少大货车的轮胎的标准气压在轮胎上面都有注明,主要看拉多少货物,如果是钢丝胎拉货1—5吨,8个气压左右。最大的气压不要超过14个气压。一般1000-20的钢丝胎是13个气压,1100-20也是13个气压,要是900的就打11个气压,要是帆线胎就打11个气压。

  • 十大未发现宝藏(6件著名的遗失宝藏)

    在宗教节日期间发生野蛮屠杀后,阿兹特克人叛乱起来,蒙特祖玛二世在混乱中丧生。相反,汤普森和他的船员杀死了西班牙总督的守卫,并独吞战利品。当莫斯比将斯托顿和其他囚犯运回联邦军队时,他的侦察兵警告他附近有一大批联盟士兵。莫斯比的游击队避免了冲突并回到了联邦军队后面,但是当他派遣七名男子追回财富时,他们被抓获并被绞死,财宝也随之下落不明。到目前为止,至少有七个人为了寻找丢失的纳粹金币而淹死在冰冷的湖中。

  • 手自一体的车等红灯用啥档(挂N档)

    推荐挂N档30秒以上用N档加手刹,30秒以下N挡加脚刹,10秒以下D加脚刹,90秒上熄火,今天小编就来聊一聊关于手自一体的车等红灯用啥档?接下来我们就一起去研究一下吧!手自一体的车等红灯用啥档推荐挂N档。人在车上绝对不能用P。一般停车场停车也不用P,只用手刹并放N空档。斜坡停车才用P。马路上准备违章停车一定要推入P而且一定要车头向里。

  • 帕金森个案ppt(JAMA想痴呆全因)

    近日,一连两篇JAMA研究给出了答案:每日步行10,000步,不仅能使痴呆风险显著降低50%,还与较低的全因、癌症、心血管疾病死亡风险相关。当每日步数达到10000步时,累积的全因、癌症、心血管疾病的死亡风险将下降50%左右。综上,每日步行10000步左右,并尽量保证以运动为目的的快走步数达到6000步,能有效地使罹患痴呆风险以及全因、癌症和心血管疾病死亡率降低50%左右,健康性价比最高!

  • 新西兰发生几级地震(新西兰发生5.8级地震)

    下面内容希望能帮助到你,我们来一起看看吧!新西兰发生几级地震据新西兰地质与核科学研究所9月22日发布的消息,当地时间21时7分,新西兰发生5.8级地震,首都惠灵顿震感明显。消息说,这次地震震中位于新西兰南岛和北岛之间的海域,震源深度51公里。新西兰首都惠灵顿可以感到明显摇晃,整个新西兰从北到南均有震感。目前尚无人员伤亡和财产损失报告。

  • 黑珍珠奶茶里面的黑珍珠是怎么来的?(黑珍珠奶茶里面的黑珍珠是怎么做的?)

    以下内容大家不妨参考一二希望能帮到您!黑珍珠奶茶里面的黑珍珠是怎么来的黑珍珠奶茶里面的黑珍珠是地瓜粉或者是木薯粉再加上红糖、清水等材料制成的。它并不是真正意义上的黑珍珠,而是可以食用的,因为外表和珍珠比较相像而得名。奶茶里面的黑珍珠制作起来比较简单,只需要准备好材料,然后按照步骤制作好即可。

  • 归园田居写作背景具体是什么(归园田居写作背景介绍)

    归园田居写作背景具体是什么归园田居的写作背景:陶渊明任官十三年,一直厌恶官场,向往田园。他在义熙元年四十一岁时,最后一次出仕,做了八十多天的彭泽县令即辞官回家,以后再也没有出来做官。陶渊明经过十三年的曲折,终于彻底认清了这一点。陶渊明品格与政治社会之间的根本对立,注定了他最终的抉择——归隐。从此他结束了时隐时仕、身不由己的生活,终老田园。归来后,作《归园田居》诗一组。