网站分布式架构

news/2024/5/20 14:52:13/文章来源:https://blog.csdn.net/weixin_34226706/article/details/86388226

原文: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工程,专门负责服务端和前端公共程序的开发。

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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_748414.aspx

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

相关文章

网站死链接检测查询工具

网站死链接检测查询工具 什么是网站死链接&#xff1a;死链接就是指网站的链接不能正常被访问&#xff0c;如A页面上面有一个B页面的链接&#xff0c;现在通过A页面的链接访问B页面&#xff0c;可是B页面已经删除或者转移&#xff0c;现在通过A页面的链接访问到B页面并没有出现…

推荐一个很好的看技术书籍的网站,也可以自己写书

2019独角兽企业重金招聘Python工程师标准>>> 1. 网站&#xff1a;https://love2.io 2. 各种技术书籍都有&#xff0c;很多都是技术大牛写的、总结的&#xff0c;也能自己把在gitHub上写的markdown整理而成的书籍上传上去共享出来。 转载于:https://my.oschina.net/u…

Java Web开发: 基于HttpServlet的用户登录网站 实例

一个简单的小例子&#xff0c;基于httpservlet的用户登录&#xff08;杂家是菜鸟刚接触javaee&#xff0c;只能从最简单出发了&#xff09;&#xff0c;首先看业务逻辑&#xff1a; 有三个文件组成&#xff0c;分别是登录、验证和欢迎界面。要达到的目标是&#xff1a; 下图是H…

你的网站会投放这样的广告么?

我震惊了&#xff0c;钱要赚&#xff0c;但为了公司名誉以及社会影响&#xff0c;就算是广告&#xff0c;能不能有个底线的啊&#xff1f;

怎么修复网站漏洞 骑士cms的漏洞修复方案

骑士CMS是国内公司开发的一套开源人才网站系统&#xff0c;使用PHP语言开发以及mysql数据库的架构&#xff0c;2019年1月份被某安全组织检测出漏洞&#xff0c;目前最新版本4.2存在高危网站漏洞&#xff0c;通杀SQL注入漏洞&#xff0c;利用该网站漏洞可以获取网站的管理员账号…

.Net网站不能预编译以及不能请求的调试过程

公司内部的一个网站&#xff0c;Aspx的&#xff0c;最近莫名其妙的出现一个问题&#xff1a; file soLog.aspx has not been pre-compiled,and cannot be requested. 这个问题只有在网站发布到服务器之后才会出现&#xff0c;本地一切正常&#xff0c;但不是每一个页面都有这一…

asp.net写的网站从1.1升级到2.0出现的错误,望各位救命!!!

asp.net从1.1升级到2.0出现的错误&#xff0c;望大侠救命&#xff01;&#xff01;我在将asp.net由1.1升级到2.0时网站程序编译通不过,错误提示为:错误 35 无法将类型"string"隐式转换为"System.Web.UI.WebControls.TextBox" D:\WebSite\Oyalife\Forum\blo…

构建高并发网站-网站架构(架构优化)

一、网站架构的角色1、基本架构2、网站架构升级&#xff0c;用户访问速度提高&#xff0c;提高用户体验CDN 解决南电信北联通网站访问慢问题&#xff0c;通过代理CDN缓存功能代理实现负载均衡功能web服务器存放音乐、图片、视频等存储无限扩大缓存解决数据库读写大、IO高&#…

网站性能优化 - 数据库及服务器架构篇

我先前曾写过三篇有关网站系统、ASP.NET 性能优化的文章&#xff0c;分别从 SQL 语句、数据库设计、ASP.NET 功能、IIS 7 的套件&#xff0c;来探讨此一性能议题。本帖算是系列作的第四篇&#xff0c;整理了一些我看过的书籍和文章&#xff0c;改从「负载均衡、服务器架构、数据…

3.2 找好图这些网站就够了

免费图库推荐 1.百度图片&#xff1a;特大尺寸。复制到ppt中&#xff0c;比例裁剪为16:9. 2.必应&#xff1a;有水印的话&#xff0c;直接裁剪掉。 3.全景网&#xff1a;已经无法使用 4.摄图网&#xff1a;http://699pic.com/tupian/chengshi.html 5.pixabay &#xff1a;h…

ppt素材网站

一、 PPTmall http://www.PPTmall.net/ 针对图表型 PPT 首选的素材网站&#xff0c;里面有大量的 PPT 图表模板 我们可以根据图表&#xff0c;逻辑&#xff0c;要素&#xff0c;颜色等分类快速选取素材 二、 演界网 http://www.yanj.cn/ 点击网站的【演示模板】——【免费专区…

色彩搭配 网站推荐

1、直接选择适合的颜色搭配&#xff0c;附有rgb值。 https://www.icoa.cn/a/512.html 2、可选择合适的色彩搭配。 http://www.360doc35.net/wxarticlenew/843127861.html 3、5款实用的配色工具 【最佳配色表(2019设计师最佳配色工具盘点)-哪吒游戏网】http://m.baigeseo.co…

python制作购物网站_python+Django创建购物网站(一)

1.凡事预则立不预则废。。工作七八个月&#xff0c;接触的全是Java&#xff0c;Java博大精深&#xff0c;到现在没学好。自己反而完全和python隔离了&#xff0c;再不练练&#xff0c;估计要废。2.下载安装pycharm社区版&#xff0c;因为免费&#xff0c;安装Django框架&#x…

springboot+mybatis+vue实战——旅游网站(一) 完成登录注册、验证码、省份增删改查功能

推荐文章&#xff1a; springboot整合redis并在项目中使用 vuespringboot 登录注册功能 目录一、创建数据库二、后端环境搭建三、实现验证码功能CreateImageCode .java新建UserController.java编写接口&#xff1a;/user/getImage效果&#xff1a;四、开发1、创建前端项目2、注…

Python爬虫网站图片并下载到本地

文章目录先看效果1、环境准备2、要爬取的网站3、程序源代码&#xff08;可直接运行&#xff09;先看效果 1、环境准备 import requests import re下载requests库&#xff1a; pip install requests2、要爬取的网站 https://www.hippopx.com3、程序源代码&#xff08;可直接运…

美国空军文化中心网站遭入侵 信息泄露

本文讲的是 : 美国空军文化中心网站遭入侵 信息泄露 , 日前&#xff0c;美国空军文化&语言中心(http://www.culture.af.mil)官方网站遭土耳其黑客Maxney入侵&#xff0c;并在网络公布了部分高度敏感的个人信息。 土耳其黑客组织Ajan的一位成员Maxney声称对此次入侵事件负…

威联通架设php网站_第14章 网站服务

一、概念HTML&#xff1a;HyperText Markup Language &#xff08; 超级 文本 标记 语言&#xff09;网页&#xff1a;使用HTML,PHP,JAVA语言格式书写的文件主页&#xff1a;网页中呈现用户的第一个页面网站&#xff1a;多个网页组合而成的一台网站服务器URL格式&#xff1a;在…

给自己的网站加入智能聊天功能

引言 现在突然发现有很多 QQ 群都开启了群机器人的功能&#xff0c;其中有两个角色&#xff0c;他们分别是&#xff1a;Baby Q 和 QQ 小冰。在 Q 群中&#xff0c;你可以对他们进行任意程度的调戏&#xff0c;不过&#xff0c;遗憾的是鱼和熊掌不可得兼&#xff0c;一个群只能进…

如何在IIS7上部署本地网站

首先打开计算&#xff0c;点击”卸载或更改程序“&#xff0c;如图&#xff1a; 然后点击&#xff1a; 之后就看到里面有个”Internet信息服务“将里面的所有选项最好都打上勾 勾完之后点击【确定】&#xff0c;会提示&#xff1a; 过几分钟就IIS安装好了 然后在【控…

怎样将IIS Express里面的网站能在局域网访问

先运行web项目&#xff0c;点击IIS Express里面运行的当前项目&#xff0c;然后能看到下面的配置路径&#xff0c;点击它&#xff0c;可以跳转到配置文件 修改配置文件的bindings节点&#xff0c;在原有的&#xff0c;比如“ <binding protocol"http" bindingInfo…