`

我设计的网站的分布式架构

 
阅读更多

互联网的网站和大部分企业管理软件一样都是使用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工程,专门负责服务端和前端公共程序的开发。

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

  以上就是本人为公司网站设计的技术架构,这里和大伙分享下,不知道好不好,希望各位大牛能给点建设性的意见。

 

转载(http://www.cnblogs.com/sharpxiajun/archive/2013/05/11/3072798.html

分享到:
评论

相关推荐

    分布式架构网上商城-分布式架构网上商城系统-基于Web的分布式架构网上商城系统设计与实现-分布式架构网上商城管理系统java代码

    基于Web的分布式架构网上商城系统设计与实现-分布式架构网上商城网站-分布式架构网上商城网站代码-分布式架构网上商城平台-分布式架构网上商城平台代码-分布式架构网上商城项目-分布式架构网上商城项目代码-分布式...

    分布式架构原理与实践(崔皓)

    #### 五、分布式架构的设计原则 1. **模块化**:确保每个服务具有单一职责。 2. **无状态服务**:尽可能减少服务之间的依赖,提高可扩展性。 3. **API网关**:统一管理对外接口,简化客户端调用过程。 4. **异步...

    分布式架构网上商城系统-分布式架构网上商城管理系统java代码-基于springboot的分布式架构网上商城系统-毕设项目代码

    基于Web的分布式架构网上商城系统设计与实现-分布式架构网上商城网站-分布式架构网上商城网站代码-分布式架构网上商城平台-分布式架构网上商城平台代码-分布式架构网上商城项目-分布式架构网上商城项目代码-分布式...

    Java分布式架构设计实战视频课程(2022最新版,13章全)

    Java分布式架构设计实战课程是2022年最新的学习资源,涵盖了从基础到高级的全方位内容,旨在帮助开发者深入理解并掌握Java在分布式系统中的应用。这套课程共有13个章节,每个章节都针对特定的分布式架构技术或概念...

    分布式架构网上商城-论文

    分布式架构网上商城--论文分布式架构网上商城--论文分布式架构网上商城--论文分布式架构网上商城--论文分布式架构网上商城--论文分布式架构网上商城--论文分布式架构网上商城--论文分布式架构网上商城--论文分布式...

    Java毕业设计基于Springboot的分布式架构网上商城的实现.zip

    Java毕业设计基于Springboot的分布式架构网上商城的实现.zipJava毕业设计基于Springboot的分布式架构网上商城的实现.zipJava毕业设计基于Springboot的分布式架构网上商城的实现.zipJava毕业设计基于Springboot的...

    2022全新版-Java分布式架构设计与开发实战

    分享一套Java分布式视频教程——《2022全新版-Java分布式架构设计与开发实战》。2022年7月完结新课,课程一共13章,提供配套的源码下载! 分布式架构是大型项目必用的架构方式,也是云原生、Serverless等新兴技术的...

    浅析分布式架构下银行多层级对公存款账户体系设计.pdf

    分布式架构是一种分布式计算机系统的设计方式,它将应用程序分解为一系列较小的、可以并行处理的服务或组件,并在多个网络节点上运行。在金融领域,特别是银行行业,分布式架构能够提供更高的性能、可扩展性和可靠性...

    基于分布式架构管理的B2C商城设计与实现.pdf

    本文介绍了一个基于分布式架构管理的B2C商城系统设计与实现过程,以及关键技术的运用。在互联网和电子商务迅猛发展的背景下,本文作者提出了一个解决方案,旨在满足现代网上购物平台对于界面友好性和查询效率的需求...

    金融业分布式架构转型痛点、路径和选型

    分布式架构在转型路径上往往面临两个主要的挑战:首先是分布式应用与微服务架构的管理,其次是分布式数据库与事务设计。微服务架构要求快速开发和部署应用,容器技术在其中扮演了重要角色,通过容器技术可以管理...

    分布式架构关键技术.pdf

    分布式架构关键技术是当前信息技术领域极为重要的研究方向,其核心在于分布式系统的设计和优化,尤其在处理大量数据、保证数据安全性和系统稳定性方面显示出独特优势。分布式系统的技术包含多个层次,从底层的分布式...

    基于分布式架构的NAT模块设计与实现.pdf

    在本文的研究成果中,作者通过对比分布式架构与传统集中式软件设计,强调了分布式架构在提升NAT效率、增强内部管理便捷性以及提高模块可移植性方面具有的明显优势。这种设计思路不仅为电信服务提供商解决了如何更...

    分布式架构设计(银行为例)

    分布式架构设计在现代银行业务中扮演着至关重要的角色,尤其对于零售银行而言,处理大量实时交易和数据分析的需求,使得分布式架构成为不可或缺的技术支撑。本文将深入探讨基于Hadoop、F5、Dubbo和SpringCloud的...

    基于云计算平台的分布式架构设计.pdf

    云计算平台的分布式架构设计是当前IT领域的一个重要研究方向,它利用了云计算的灵活性和分布式系统对业务的承载能力,实现系统功能的高效、可靠和可伸缩。分布式架构将业务负载分担在不同的业务虚拟机上,通过虚拟化...

    大型分布式网站架构设计与实践

    《大型分布式网站架构设计与实践》主要介绍了大型分布式网站架构所涉及的一些技术细节,包括SOA架构的实现、互联网安全架构、构建分布式网站所依赖的基础设施、系统稳定性保障和海量数据分析等内容;深入地讲述了...

Global site tag (gtag.js) - Google Analytics