设计的一个网站的分布式架构

互联网的网站和大部分企业管理软件一样都是使用B/S架构模型,但是大型的公共网站B/S架构会更加复杂,对架构人员的要求更高,今天我想在自己博客里聊聊我设计的网站的B/S技术架构。

  不管是B/S架构的企业管理系统还是网站技术架构可以抽象为如下简图:

  在传统B/S架构的企业管理系统里,技术架构往往就是一个工程项目,各个逻辑分层都是该工程的业务逻辑模块。但是作 为提供公共服务的网站,由于用户群比较庞大,网站并发量高,需求变化大,变更频繁以及网站出于对安全的考虑,以上的逻辑分层在技术架构上的实现也就会复杂 的多。本人前不久做一个网站,我设计的技术架构简图如下:

  我把网站项目拆分为三个子项目:前端项目、服务端项目和memcache项目,前端项目包含页面、静态资源和控制层;服务端项目包含业务层和数据库操作层;memcache项目缓存前端项目和服务端项目公用的数据。

  在系统部署上,前端项目和服务端项目都采用分布式方式(我们的网站前端是4台服务器,服务端是4台服务器),用户请求进入前先通过负载均衡设备 进行请求分发,前端和服务端之间以及服务端和数据库之间有防火墙保证系统的安全性,前端的集群和服务端集群分属到不同网络环境里,前端集群可以访问外网, 服务端集群和数据库所在网络不能直接访问外网,但是前端网络环境和服务端网络环境之间可以进行通信。

  服务端和客户端用我们自定义的报文进行通讯,传输协议时http,由于本人所在的网站安全性要求比较高,用户传输的请求协议使用https。

  为了保证服务端和客户端通讯的效率,客户端和服务端通讯我们使用长连接(我们网站服务端语言选择的是java,通讯层使用netty框架开发 的),为了保证长连接,我们写了一个心跳检测服务,该服务在后台线程里运行,每个5分钟检测一次心跳,当然检测的间隔时间是可以配置的。此外,我们事先估 计过网站的最大并发量,在网站启动时候,我们构建了一个线程池(我们使用的服务器是8核处理器,每核最大线程数256,所以我们线程池里总共的最大线程总 数数是8*256*4=8196),每个线程处理一个用户的请求。

  由于客户端项目采取分布式部署,因此存在session共享的问题,我们网站的session共享没有使用web容器自带的session共享 机制,而是我们自己研发了一套session机制,原理很简单,具体是我们会对每个用户会话生成一个唯一标示,我们的唯一标示是这么设计:当前用户的 session的id值+随机16位数字和字母组合+当前的纳秒值,然后将该值哈希算出一个key,原有保存在session里的值保存在 memcache集群里,这些数据的key就是我们算出的用户唯一标示。最终我们网站前端不在使用session对象,而是我们自己设计的session 机制,对此我们还封装了一套自定义标签,在页面上操作我们自定义的session。

  服务端也有类似的共享机制,但是有所不同,当客户端请求服务端时候,请求会具体落到服务端的某一台服务器,因为本网站有些请求处理时异步的,也 就是说客户某些请求不是立即返回给用户,而是现将请求分发给服务端,此时客户端会返回用户一个相应标示,说明该请求已经被受理,正在处理中,而服务端的某 个线程此时已经开始处理了该请求,客户端按一定时间间隔发送请求给服务端,问询请求是否处理完成,但是服务端也是分布式,请求时随机发送,客户端的问询可 能会分发到别的服务器,因此这样的请求,我会在客户端记录下处理的服务端ip地址和线程id,在问询的时候就会访问指定好的服务器和线程,直到请求处理完 毕,最后关闭询问,将结果返回给用户。

  由于我们把一个网站项目拆分成了三个独立项目,因此在项目管理和协调上增加了难度,所以我们引入maven框架对工程进行了管理和构建,同时构建一个common工程,专门负责服务端和前端公共程序的开发。

  本框架将展示层和业务处理层彻底分开,因此客户端工程师可以专心做客户端,服务端工程师专心做服务端,大家只要学习如何封装通讯协议就行,因此很利于项目组人员的横向扩展。

时间: 2024-11-06 02:03:51

设计的一个网站的分布式架构的相关文章

网站的分布式架构

如果你对项目管理.系统架构有兴趣,请加微信订阅号"softjg",加入这个PM.架构师的大家庭 互联网的网站和大部分企业管理软件一样都是使用B/S架构模型,但是大型的公共网站B/S架构会更加复杂,对架构人员的要求更高,今天我想在自己博客里聊聊我设计的网站的B/S技术架构. 不管是B/S架构的企业管理系统还是网站技术架构可以抽象为如下简图: 在传统B/S架构的企业管理系统里,技术架构往往就是一个工程项目,各个逻辑分层都是该工程的业务逻辑模块.但是作为提供公共服务的网站,由于用户群比较庞大

如何设计出高可用的分布式架构

在分布式架构中,SOA 和微服务架构是最常见的两种分布式架构,而且目前服务网格的概念也越来越火了,我们就先从这些常见的架构开始. SOA 架构解析 SOA 全称是:Service Oriented Architecture,中文释义为 "面向服务的架构". 它是一种设计理念,其中包含多个服务,服务之间通过相互依赖最终提供一系列完整的功能. 各个服务通常以独立的形式部署运行,服务之间通过网络进行调用,架构图如下: 跟 SOA 相提并论的还有一个 ESB(企业服务总线),简单来说 ESB

大型电商分布式网站架构设计与实践,Java分布式架构,Java事务分布式高并发-视频教程

15套java架构师.集群.高可用.高可扩 展.高性能.高并发.性能优化.Spring boot.Redis.ActiveMQ.Nginx.Mycat.Netty.Jvm大型分布 式项目实战视频教程 视频课程包含: 高级Java架构师包含:Spring boot.Spring  cloud.Dubbo.Redis.ActiveMQ.Nginx.Mycat. Spring.MongoDB.ZeroMQ.Git.Nosql.Jvm.Mecached.Netty.Nio.Mina.性能调优.高并发.

极客时间-左耳听风-程序员攻略-分布式架构入门

分布式系统涵盖的面非常广,具体来说涵盖如下几方面: 服务调度,涉及服务发现.配置管理.弹性伸缩.故障恢复等. 资源调度,涉及对底层资源的调度使用,如计算资源.网络资源和存储资源等. 流量调度,涉及路由.负载均衡.流控.熔断等. 数据调度,涉及数据复本.数据一致性.分布式事务.分库.分表等. 容错处理,涉及隔离.幂等.重试.业务补偿.异步.降级等. 自动化运维,涉及持续集成.持续部署.全栈监控.调用链跟踪等. 所有这些形成了分布式架构的整体复杂度,也造就了分布式系统中的很多很多论文.图书以及很多很

分布式架构设计之电商平台

分布式架构设计之电商平台 何为软件架构?不同人的答案会有所不同,而我认为一个好的软件架构除了要具备业务功能外,还应该具备一定的高性能.高可用.高伸缩性及可拓展等非功能需求.而软件架构是由业务架构和技术架构两部分组成,因为有了业务结构才会催生出软件架构,进而来满足业务上的需求,所以,在做软件架构设计时,需要分为业务架构设计和技术软件架构设计,二者不可分离哦!那么,接下来就以本人实际工作中的电商平台为例,进行说明电商平台架构设计,因为不同行业产品系统不同业务不同,而催生的系统软件的实现要求及架构设计

软件架构设计学习总结(13):大型网站技术架构(七)网站的可扩展性架构

扩展性是指对现有系统影响最小的情况下,系统功能可持续扩展或提升的能力. 设计网站可扩展架构的核心思想是模块化,并在此基础上,降低模块间的耦合性,提供模块的复用性.模块通过分布式部署,独立的模块部署在独立的服务器上(集群)从物理上分离模块之间的耦合关系. 模块分布式部署以后具体聚合方式主要有分布式消息队列和分布式服务. 1.利用分布式消息队列降低系统耦合性 如果模块之间不存在直接调用,那么新增模块或者修改模块对其他模块影响最小,这样系统的可扩展性无疑更好一些.         事件驱动框架:通过在

网站分布式架构

原文:http://xubaoguo.iteye.com/blog/1882030 摘要: 互联网的网站和大部分企业管理软件一样都是使用B/S架构模型,但是大型的公共网站B/S架构会更加复杂,对架构人员的要求更高,今天我想在自己博客里聊聊我设计的网站的B/S技术架构.不管是B/S架构的企业管理系统还是网站技术架构可以抽象为如下简图: 在传统B/S... <!-- SingleAd begin --> <iframe id="baidu_clb_slot_iframe_66411

hadoop分布式架构和设计

引言 Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统.它和现有的分布式文件系统有很多共同点.但同时,它和其他的分布式文件系统的区别也是很明显的.HDFS是一个高度容错性的系统,适合部署在廉价的机器上.HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用.HDFS放宽了一部分POSIX约束,来实现流式读取文件系统数据的目的.HDFS在最开始是作为Apache Nutch搜索引擎项目的基础架构而开发的.HDFS是A

分享JAVA从初级程序员到架构师视频,文档,架构设计,大型网站架构分析,大数据分析资料

JAVA从初级程序员到架构师视频,文档,架构设计,大型网站架构分析,大数据分析资料, 搭建高并发.高可用电商架构设计资料需要的联系我.很多目录都没列出来(QQ空间相册里有很多目录的截图)加QQ:1927360914