单机服务到分布式架构的演变,有了它,面试再也不慌了!

在这里插入图片描述

由于疫情的原因,我这里被分配的任务也不是很多,所以就会空闲出一点时间,一般这个时候我都会做自己的事情,比如看看源码、翻翻csdn的博客、然后就是写写博客,正当我沉迷在源码中不能自拔的时候,总监突然来到我旁边,应该是知道了我最近不怎么忙,他轻声的对我说道:最近这段时间大家的任务也不是特别多,空闲时间比较足,你这边能不能做点技术分享什么的,一来可以联络一下同事之间的感情,二来也可以增加同事之间的学习氛围,你觉得怎么样?

听到这个我就知道,我可能干不了自己的事情了,毕竟技术分享也能增加与同事之间的感情,所以我就答应了,但是我愁啊,我该分享一个什么东西呢?如果讲的是java方向,除了java的同事,其他同事听起来就会很吃力,但是讲其他方面,我也不知道能讲什么。。。。。。。。

在这里插入图片描述
宝宝心里难受啊,一直在想我要将一个什么样的话题才能让大部分的人都能听得懂并且感兴趣呢?这里面肯定不时出现太多的代码,既然这样,那我就讲一讲分布式的架构演进吧,这个话题既高端,也能让大部分的人听懂,我就是个天才。
在这里插入图片描述
好了,不废话了,开始这次的主题,分布式架构的演变。

单体服务

我记得在我实习的时候用的就是单体的服务,那个时候的架构很简单,前后端分离都还没有,直接jsp+java实现一套项目,整个流程相当简单,就连nginx都没有用到,我们一起来看看当时的架构是什么样的。
在这里插入图片描述

引入nginx

没错,就是这么简单,浏览器通过接口访问服务器,服务器通过用户的请求操作数据库,然后再相应给浏览器,这就是一个最简单的单体服务的流程,后来领导觉得直接将端口暴露出去相当危险,我们需要做一层代理,让用户直接通过域名访问。然后流程就被设计成了这样:
在这里插入图片描述
这是引入nginx之后的架构图,在这样运行了一段时间之后,突然有一天,领导找到我并说到:你写的代码是不是有问题,为什么一个普通的查询需要很长的时间?基本操作都卡的要死,给你一周时间,赶紧给我解决!

引入redis单体

经过我的排查之后发现导致程序变卡的原因是数据库受到了瓶颈,压力太大,承受不住那么大的请求,既然问题找到了,那解决就很简单了,我在程序和数据库之间增加一个中间件:redis,使用它来降低数据库的访问,这样性能自然会得到提升。
在这里插入图片描述
舒服,引入redis,并且对代码做了一些优化之后,发现速度上来了,我有可以快乐的写bug了,就这样过去了大概一个月左右,这天我正在和同事讨论一些八卦,突然感觉背后一阵阴风 ,我知道,出事了,没想到是领导又来找我麻烦了,他说由于我们的产品太火了,下载注册人数都几十万了,日活跃人数也是上万,我们现在的这套架构撑不住了,你有没有什么好的建议?我惊讶了一下,我们的产品这么受欢迎吗?于是我和领导说,我们可以将数据做一下读写分离,这样也可以提升一下程序的性能,但是对于现在的情况,就算加了读写分离,作用应该也不大,我们应该将单体多部署几台,提升程序的吞吐量。

引入mysql读写分离

在这里插入图片描述
这就是将数据库改造成读写分离之后的架构,读操作和写操作分别在不同的库中,这样,查询和写入就不会那么长的时间了,因为再读库中没有写操作,写库中没有读操作,由于我们一般是读的操作比较多,所以这个时候我们我们可以将读库的配置设置的好一点,写库的设置的差一点,均衡分配,但仅仅这样是也是不能支撑那么大流量的,所以这个时候我们还需要将服务器做集群。

引入服务器集群

在这里插入图片描述
这就是我们单体的最终架构,改造完成之后性能确实得到了很大的提升,因为服务做了集群之后,分散了很多的请求,比如一个tomcat能支持的最高并发是200,那现在三个服务就能支持600的并发,性能提升了3倍,最终扩充了多少台服务器我也不清楚,因为这个是运维做的,集群算是做完了,总算可以满足领导的要求了,为了搞定这一套一套的升级,不知道熬了多少夜,看到电脑旁边掉落的那几根头发,我满意的点了点头。
在这里插入图片描述
在后面的两个月的时间里,我们再不停的做迭代更新,几乎每周都会有版本上线,两个月过后版本终于稳定下来了,不怎么有更新了,所以又来到了程序猿的空闲时间,同事们每天上班都做着自己的事情,有学习的,有逛淘宝的,有玩游戏的,更夸张的是居然有个同事闲着没事居然去撩产品小姐姐,握草,这是想要自掘坟墓吗?

我们大概空闲了一周的时间左右,我们的技术总监说话了,今天下午3点,所有后端开发人员会议室开会,听到这个消息,我就知道,有活干了,难道是接了新的项目?

到了下午3点,我们来到会议室,只见技术总监已经提前到了,并且屏幕上写着五个大字,看到这5个字,我心里想,该来的还是会来,躲不过去的,那就是:分布式架构

分布式架构

因为我知道,我们产品注册人数已经高达几十万,以我们现在的架构肯定会有撑不住的一天,这个产品肯定会被重构,并且是以分布式的架构进行重构,果然,今天技术总监就召开了这个会议。

技术总监:我们的产品现在比较火热,不管是注册人数还是日活跃人数都是比较高的,为了让程序能有更好的健壮性,我希望我们可以对这个项目进行重构,以分布式的架构,今天开会就是我们一起来做个技术选型,你们对分布式熟悉吗?

同事A:分布式系统(distributed system)是建立在网络之上的软件系统。正是因为软件的特性

  • 55
    点赞
  • 77
    收藏
    觉得还不错? 一键收藏
  • 32
    评论
pomelo 是由网易开发的基于node.js开发的高性能、分布式游戏服务器框架, 也可作为高实时web应用框架。 Pomelo的应用范围 pomelo最适合的应用领域是网页游戏、社交游戏、移动游戏的服务端,开发者会发现pomelo可以用如此少的代码达到强大的扩展性和伸缩性。当然还不仅仅是游戏,很多人断言未来的web时代是实时web应用的时代, 我们发现用pomelo开发高实时web应用也如此合适, 而且伸缩性比其它框架好。目前不推荐将pomelo用于大型的MMO rpg游戏开发,尤其是3d游戏, 还是需要象bigworld这样的商用引擎来支撑。 Pomelo的理念 pomelo的第一个理念是让游戏(高实时web应用)服务器的开发变得非常简单, 而不是解决某类算法或系统上的难题。这个设计理念跟rails是很类似的;第二个理念是重视性能和可伸缩性,用户用pomelo开发出来的游戏天生具有很强的伸缩性,扩展也很容易。我们在性能优化上也花了很多功夫,并且会持续进行;第三个理念是让第三方很容易扩展,框架用了很多插件式的设计, 组件component、路由规则、甚至管理控制台都可以完全由第三方扩展。 Pomelo的框架组成 pomelo包括三部分: 框架, pomelo的核心, 与以往单进程的游戏框架不同, 它是高性能、分布式的游戏服务器框架,并且使用很简单 库, 包括了开发游戏的常用工具库, 如人工智能(ai), 寻路, aoi等 工具包, 包括管理控制台, 命令行工具, 压力测试工具等 pomelo特性 快速、易上手的游戏开发模型和api 高可伸缩的多进程架构, 支持MMO的场景分区和其它各类分区策略 方便的服务器扩展机制,可快速扩展服务器类型和数量 方便的请求、响应、广播、服务器通讯机制, 无需任何配置 注重性能,在性能、可伸缩性上做了大量的测试、优化 提供了较多扩展组件,包括游戏开发常用的库和工具包 提供了完整的MMO demo代码(客户端html5),可以作为很好的开发参考 基于socket.io开发,支持socket.io支持的多种语言客户端 为什么使用pomelo? 高并发、高实时的游戏服务器的开发是很复杂的工作。跟web应用一样, 一个好的开源容器或开发框架可以大大减少游戏开发的复杂性,让开发变得更加容易。遗憾的是目前在游戏服务器开发领域一直没有太好的开源解决方案。 pomelo将填补这个空白, 打造一款完全开源的高性能(并发)游戏服务器框架。 pomelo的优势有以下几点: 架构的可伸缩性好。 采用多进程单线程的运行架构,扩展服务器非常方便, node.js的网络io优势提供了高可伸缩性。 使用非常容易, 开发模型与web应用的开发类似,基于convention over configuration的理念, 几乎零配置, api的设计也很精简, 很容易上手。 框架的松耦合和可扩展性好, 遵循node.js微模块的原则, framework本身只有很少的代码,所有component、库、工具都可以用npm module的形式扩展进来。任何第三方都可以根据自己的需要开发自定义module。 提供完整的开源MMO游戏demo参考(基于HTML 5)。 一个超过1万行代码的游戏demo,使开发者可以随时借鉴demo的设计与开发思路。 在线演示:http://pomelo.netease.com/demo.html 标签:开发框架  游戏框架
评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值