网站分布式架构

原文:http://xubaoguo.iteye.com/blog/1882030

摘要: 互联网的网站和大部分企业管理软件一样都是使用B/S架构模型,但是大型的公共网站B/S架构会更加复杂,对架构人员的要求更高,今天我想在自己博客里聊聊我设计的网站的B/S技术架构。不管是B/S架构的企业管理系统还是网站技术架构可以抽象为如下简图: 在传统B/S...

<!-- SingleAd begin -->

<iframe id="baidu_clb_slot_iframe_664111" style="border-width: 0px; margin: 0px; vertical-align: bottom; display: block;" src="about:blank" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" width="300" height="250"></iframe>

<!-- SingleAd end -->

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

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

时间: 2025-01-02 02:42:43

网站分布式架构的相关文章

网站分布式架构_1_ 简略

分布式一般主要是处理大访问量,通过把请求分发到多台机器或者服务来提升访问速度和访问量 下面是现在多数服务器的配置 我们从下往上说: 代码层,这里一般都用过一些架构进行配置,可以配置最大连接数.文件上传大小.用户登录信息保留时间等等,另外就架构本身会涉及到一些设计模式,对象创建.保存,代码业务逻辑的优化.这些都会影响到程序处理请求的速度和并发量. 如果请求很慢,而且很明显熟读卡在这个地方了,可以考虑优化代码,当然如果是数据库压力过大,那就要对数据库进行分布式等方式的优化,这里暂时不进行详细接受,后

网站的分布式架构

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

大型电商分布式网站架构设计与实践,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.性能调优.高并发.

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

互联网的网站和大部分企业管理软件一样都是使用B/S架构模型,但是大型的公共网站B/S架构会更加复杂,对架构人员的要求更高,今天我想在自己博客里聊聊我设计的网站的B/S技术架构. 不管是B/S架构的企业管理系统还是网站技术架构可以抽象为如下简图: 在传统B/S架构的企业管理系统里,技术架构往往就是一个工程项目,各个逻辑分层都是该工程的业务逻辑模块.但是作 为提供公共服务的网站,由于用户群比较庞大,网站并发量高,需求变化大,变更频繁以及网站出于对安全的考虑,以上的逻辑分层在技术架构上的实现也就会复杂

大型网站系统架构的演化(转)

前言 一个成熟的大型网站(如淘宝.京东等)的系统架构并不是开始设计就具备完整的高性能.高可用.安全等特性,它总是随着用户量的增加,业务功能的扩展逐渐演变完善的,在这个过程中,开发模式.技术架构.设计思想也发生了很大的变化,就连技术人员也从几个人发展到一个部门甚至一条产品线.所以成熟的系统架构是随业务扩展而完善出来的,并不是一蹴而就:不同业务特征的系统,会有各自的侧重点,例如淘宝,要解决海量的商品信息的搜索.下单.支付,例如腾讯,要解决数亿的用户实时消息传输,百度它要处理海量的搜索请求,他们都有各

Windows平台分布式架构实践 - 负载均衡

概述 最近.NET的世界开始闹腾了,微软官方终于加入到了对.NET跨平台的支持,并且在不久的将来,我们在VS里面写的代码可能就可以通过 Mono直接在Linux和Mac上运行.那么大家(开发者和企业)为什么那么的迫切的希望.NET跨平台呢?第一个理由是便宜,淘宝号称4万多台服务器 全部运行在Linux,Linux平台下还有免费的MySql,这些都是免费的,这些省下来直接就是利润呀,做企业的成本可以降低又没有任何损失,何乐而 不为呢?第二个理由是在Linux系统下还有很多非常优秀的构架(当然同样也

大型网站技术架构

初始阶段 小型网站的架构很简单,访问量很少,一台服务器充当应用服务器.数据库服务器和文件服务器都绰绰有余. 应用服务与数据服务分离 随着业务量的增大,业务的处理能力遇到了瓶颈.CPU总是满负荷,文件越来越多,而数据库越来越繁忙.这时候需要增加服务器,将服务器的职能进行划分,分别是应用服务器.文件服务器和数据库服务器. 缓存技术改善网站性能 网站访问量的规律与现实世界中的财富分配一样遵循二八原则.80%的业务集中在20%的数据中,比如百度搜索的关键字集中在少数的热门词汇中,淘宝前几页的商品占了大部

关于分布式架构的思考

1 概述 分布式系统就是利用一组机器来协同工作,并对外提供统一的服务. 分布式架构的核心,在于拆分. 2 分布式数据架构 2.1 垂直拆分 按照业务将数据拆分成不同的库; 如sns网站中日志与照片可以分成两个数据库. 2.2 读写分离 一般是主从架构,主库用于写,从库用于读; 主从之间需要同步机制来保证数据的一致性. 2.3 水平拆分 按照数据的特点将全量的数据拆分成不同的分区,并分布到指定的库中; 如sns网站中的日志/照片等信息是按照userID来组织的,因此可以根据userID将数据拆分到

JavaWeb网站技术架构

JavaWeb网站技术架构总结 题记 工作也有几多年了,无论是身边遇到的还是耳间闻到的,多多少少也积攒了自己的一些经验和思考,当然,博主并没有太多接触高大上的分布式架构实践,相对比较零碎,随时补充(附带架构装逼词汇). 俗话说的好,冰冻三尺非一日之寒,滴水穿石非一日之功,罗马也不是一天就建成的,当然对于我们开发人员来说,一个好的架构也不是一蹴而就的. 初始搭建 开始的开始,就是各种框架一搭,然后扔到Tomcat容器中跑就是了,这时候我们的文件,数据库,应用都在一个服务器上. 服务分离 随着系统的