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

news/2024/5/10 1:53:43/文章来源:https://blog.csdn.net/hong2511/article/details/81491187
原文地址为: 我设计的网站的分布式架构

  互联网的网站和大部分企业管理软件一样都是使用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.luyixian.cn/news_show_794458.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python+Django+Eclipse 在Windows下快速开发自己的网站

原文地址为: PythonDjangoEclipse 在Windows下快速开发自己的网站一、配置开发环境 我的开发环境是:Python3.3.2 Django1.5.2 Eclipse 1、安装Python 下载地址:http://www.python.org/getit/ 安装完成后为了方便可以配置下环境变量&…

大型网站架构不得不考虑的10个问题

2019独角兽企业重金招聘Python工程师标准>>> 这里的大型网站架构只包括高互动性高交互性的数据型大型网站,基于大家众所周知的原因,我们就不谈新闻类和一些依靠HTML静态化就可以实现的架构了,我们以高负载高数据交换高数据流动性的…

万网稳居国内域名网站榜首 西部数码跃居第二

据国际统计机构Alexa公布的最新数据显示,4月第二周(4月9日-4月15日),国内域名主机网站覆盖率最高的仍旧是中国万网,达 1730。西部数码跃居第二,达620。易名中国跌至第三,达570。下面&#xff0c…

MYSQL数据库自动本地/异地双备份/MYSQL增量备份[连载之构建百万访问量电子商务网站]...

MYSQL数据库自动本地/异地双备份/MYSQL增量备份[连载之构建百万访问量电子商务网站]出处:http://jimmyli.blog.51cto.com/我站在巨人肩膀上Jimmy Li 作者:Jimmy Li 关键词:网站,电子商务,Shell,自动备份,异地备份 ------[连载之电子商务系统架…

网站备案流程

网站备案的备案流程 1、阿里备案的登录账号和阿里服务器的账号不是同一个,需要重新注册 2、账号注册成功后重新登录进入,填写企业资料(如果是个人备案填写个人资料) 3、填写产品信息 4、填写主体信息 5、填写网站信息,…

网站侵权处理案例

一个案例,和你的情况得很相像,看一下。很长,但详细。从中国网页第一侵权案看网络纠纷的管辖权问题原告:瑞得(集团)公司被告:东方信息服务公司(简称东方公司) 〔案情介绍〕…

Screenfly – 各种设备的屏幕和分辨率下快速测试网站

Screenfly 让你能够在各种设备的屏幕和分辨率下查看你的网站。输入网址,并点击GO开始浏览网页。Screenfly 可以使用代理服务器来模拟设备,当您查看您的网站,代理服务器模仿您所选择的设备的用户代理字符串。 您可能感兴趣的相关文章特别推荐&…

如何解决Chrome首页被流氓网站劫持的问题?

如何解决Chrome首页被流氓网站劫持的问题? 点击这里查看解决流氓网站劫持的方法。 以上方法解决不了,参考以下的 通过chrome://view 查看命令行处是否有异常网址,如果有可能考虑如下方式解决 Chrome命令行参数畅谈(一) 命令行…

SharePoint 2013 图文开发系列之网站栏

转载自:http://www.cnblogs.com/jianyus/p/3463880.html 网站栏的本质,就是一个xml的描述文件,所以创建过程,基本就是通过Feature部署一个Xml文件,然后修改Xml文件的网站栏描述。 1、添加新项目,选择ShareP…

大型网站架构演进(5)数据库读写分离

在使用缓存后,使大部分的数据读操作访问都可以不通过数据库就能完成,但是仍有一部分读操作(包括未命中缓存的,和缓存过期的)和全部的写操作需要访问数据库,当网站的访问量继续增加后,数据库会因为负载压力过高导致成为…

教你如何创建一个免费的网站

小编先声明一下,我并不是来做广告的!作为一个初学者,刚刚摸索出来一些经验想要拿来跟大家分享罢了!希望能帮助到那些想要做网站的亲们。算是分享一些我个人的经验吧。 PS:现在主机屋已经不提供免费空间服务了&#xff…

Vue.js+express建站

网站基本架构: 基本的CS架构,开发时使用本地服务器,数据库使用云服务器的数据库,方便共享数据,上线时可配置服务器到云服务器。 技术栈: Vue.js: 前端开发框架:响应式数据绑定和组件化开发&…

阿里云、宝塔、wordpress建站

1 阿里云 购买一个学生机就行啦 2 宝塔 2.1 更改阿里云的镜像 技巧01:先关掉阿里云之前的镜像 技巧02:到镜像市场中寻找宝塔的镜像资源 2.2 配置安全组 宝塔的控制面板需要开通端口 8888,所以需要到安全组中去配置端口 2.3 登陆宝塔控制面板 …

大型网站技术架构(五)--网站高可用架构(转)

网站的可用性(Avaliability)描述网站可有效访问的特性。 1、网站可用性的度量与考核 网站不可用时间(故障时间)故障修复时间点-故障发现(报告)时间点 网站年度不可用时间(1-网站不可用时间/年度…

站长,不要忘了你的网站是做什么的

随着互联网技术的发展,大大小小的实体行业进入到互联网,站点竞争进入了前所未有的“革命时代”,越来越多的站点了解并熟悉SEO技术,各个行业的站点流量拼抢到达了一种狂热。对搜索引擎是越来越了解并且熟悉其排名模式。如果今天你跟…

django搭建一个小型的服务器运维网站-拿来即用的bootstrap模板

目录 项目介绍和源码;拿来即用的bootstrap模板;服务器SSH服务配置与python中paramiko的使用;用户登陆与session;最简单的实践之修改服务器时间;查看和修改服务器配置与数据库的路由;基于websocket的实时日志实现&#…

主题网站

主题网站一般国外的多一些 国内的大多也不是原创。都是从国外的网站DOWN来的 先是几个网络硬盘的连接主题很多 http://alexjitaojun.ys168.com/ http://alexjitaojun1.ys168.com/ http://asca.ys168.com/ 1:国内网站 http://www.gznat.com/ http://www.enet.com.cn…

微软Sharepoint管理工具包详解-批量网站集操作

微软Sharepoint管理工具包详解-批量网站集操作 前几天有人问我关于操作网站集的一些问题,其实微软也提供了一个批量操作网站集的功能。在这里我把具体的操作方法提供给大家。 首先,需要从微软官方网站下载管理工具包,下载地址: h…

阿里云+wordpress搭建个人博客网站【小白专用的图文教程】

【正文】 在阿里云上搭建使用个人博客主要分为以下几个步骤: 1、购买阿里云ECS主机 2、购买域名 3、申请备案 4、环境配置 5、安装wordpress 6、域名解析 声明一下,本人对服务器端的知识不是很熟悉,但一心想做个自己的个人网站装一下哔&…

CCTV网站菜单技术学习

以前的一个项目中左右菜单太长&#xff0c;想实现可以左右滚动的效果&#xff0c;可是一直没有找到理想的解决方案&#xff0c;今天突然看到CCTV上菜单很炫&#xff0c;实现了我当时想要的效果。赶快来学习一下。 我判断前台是用下面的代码实现&#xff1a; <div id"im…