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

news/2024/5/20 20:31:17/文章来源:https://blog.csdn.net/weixin_33916256/article/details/85557725

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

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

相关文章

JavaWeb基于Jsp+Servlet的动物领养网站(原创毕业设计项目)

项目类型:JAVA WEB项目项目名称:JavaWeb基于JspServlet的动物领养网站用户类型:双角色(管理员爱心人士)设计模式:JspServlet开发工具:Eclipse 数据库:MysqlNavicat数据库表&#xff…

基于Nginx的负载均衡网站架构

操作环境:VMware Fusion 操作系统:Centos6 实验架构设计图及实现: 实验说明: Nginx服务器作为Web前端,当接收到用户的Web访问请求时,将请求转发 给内部真正的WEB服务器。 Nginx具有两个网卡,一…

【原创】Javaweb篮球俱乐部网站(Web网站毕业设计)

JavaWeb技术开发,后端采用JspServlet。前端使用的是Bootstrap的一个网站模板。通过3种角色使用,实现了包括了球员信息管理、球队信息管理、赛事信息发布、赛事订阅等多个不同的模块。 项目类型:JavaWeb源码 用户类型:3个角色(管理…

【原创】基于Web的学习资料共享网(JavaWeb学习资料网站)

项目介绍:通过2种角色使用,实现了包括了学习资料发布、学习资料下载、搜索学习资料、用户管理等多个不同的模块。Javaweb后端采用JspServlet。前端使用的是Layui的一个网站模板。 项目类型:JavaWeb源码 用户类型:2个角色(管理员用…

1.网站数据库交互sql注入

开学了学习时间少非常了,虽然是职高但不是计算机专业 sql注入打基础,之前都学习的sql注入原理,没有学习sql语句感觉有点迷糊,就直接拿别人的语句自己进行找网站漏洞,或者用sqlmp直接去扫,感觉很麻木不知道…

mysql如何导入网站数据_mysql怎么把数据导入进去

mysql把数据导入的方法&#xff1a;1、使用“mysql -u用户名 -p密码 < sql文件”语句导入数据&#xff1b;2、使用“source sql文件的路径”语句导入数据&#xff1b;3、使用mysqlimport导入数据。1、mysql 命令导入使用 mysql 命令导入语法格式为&#xff1a;mysql -u用户名…

为什么使用getrequestdispatcher跳转出现404_网站优化之网站为什么要做301定向跳转?...

网站在进行优化的过程中&#xff0c;有一个重要的网站检查因素就是301定向跳转&#xff0c;为什么要做301定向跳转呢&#xff1f;301定向跳转是用户或搜索引擎对浏览器发出请求时&#xff0c;网站服务器返回HTTP数据流中头信息中的一种状态码&#xff0c;表示本网页自动的转移到…

IOS学习收集的相关网站

2019独角兽企业重金招聘Python工程师标准>>> 1&#xff0c;CocoaChina&#xff1a;http://www.cocoachina.com/ 2&#xff0c;Code4App&#xff1a;http://code4app.com/ 3&#xff0c;梦维&#xff1a;http://www.dreamingwish.com/ 4&#xff0c;open开源文档&a…

脚本启动显示查询频繁被服务器防御_WEB网站防御DDoS攻击的六种方法

DDoS攻击是一种常见攻击&#xff0c;可确实是个困扰运维人员最为恼火的问题&#xff0c;可导致网站宕机、服务器崩溃、内容被篡改甚至品牌/财产严重受损。其实防御DDoS攻击除了运维人员日常的一些防范意识及操作外&#xff0c;IDC服务商提供的付费增值服务是最好的选择&#xf…

大型网站

2019独角兽企业重金招聘Python工程师标准>>> 模块 DB CACHE 分布式文件系统 非可靠通知服务 搜索 名词 java中间件 : 消息中间件&#xff1a;Notify、MetaQ 服务框架 负载中心 中间件 大型系统 转载于:https://my.oschina.net/u/1380237/blog/282582

如何搭建一个属于自己的博客/企业网站?

本文首发于 Guanngxu 的个人博客&#xff1a;如何搭建一个属于自己的博客/企业网站 本文参考内容&#xff1a; 如何做博客/企业站以及注意事项 Typecho支持Emoji表情方法 说明&#xff1a;此篇文章得益于王红星的指导&#xff0c;喜欢直接粗暴一点的朋友可以跳过前面&#xff0…

php威客网,最新带支付宝支付接口的PHP威客任务网站完整版源码破_界面漂亮整洁...

源码介绍这是一款基于PHPMYSQL技术构架的威客系统 &#xff0c;多年实践和对威客模式商业化运作的大量调查分析而精心策划研发&#xff0c;是您轻松搭建威客网站的首选利器。该系统针对威客任务模型进行了细致的分析&#xff0c;提供完善威客任务流程控制解决方案&#xff0c;并…

云服务器上的网站不能访问权限,【权限777】云服务器网站访问提示Internal Server Error...

最近收到久云大使主机用户的故障申告&#xff0c;访问网站提示“Internal Server Error The server encountered an internal error or misconfiguration and was unable to complete your request”如下图&#xff1a;上面的错误提示的意思是&#xff1a;访问遇到一个服务器内…

访问Ice-Pick Lodge:假设公众筹款网站Kickstarter在成功

Xsolla非常高兴採訪了来自莫斯科的工作室 Ice-Pick Lodge 的Golubeva。数天前&#xff0c;该公司已成功在Kickstarter上募集资金&#xff0c;创造出最知名的游戏“Pathologic” 。这是一个巨大而复杂的工程&#xff0c;预算远远超过25万美元。亚历山大告诉了我们用于翻拍的技术…

python render_python:使用漏斗图展示的网站客户转化率(pyecharts)

大家好&#xff01;今天来分享一下如何用Python工具来帮助我们制作成一张漏斗图。漏斗图适用于业务流程比较规范、周期长、环节多的流程分析&#xff0c;通过漏斗各环节业务数据的比较&#xff0c;能够直观地发现和说明问题所在。在网站分析中&#xff0c;通常用于转化率比较&a…

python html转图片_熬了一夜!我用Python做了一个网站,帮小姐姐生成漫画头像

对于动漫&#xff0c;大家一定都不陌生&#xff0c;小编周围的不少单身码农都是动漫迷。小编也是一个资深动漫迷&#xff0c;动漫里面有好多漂亮的小姐姐&#xff0c;比如斗破苍穹的美杜莎&#xff0c;云韵&#xff0c;萧薰儿&#xff0c;天行九歌里面紫女&#xff0c;焰灵姬。…

HttpWebRequest自动登录网站并获取网站内容(不包含验证码的网站)

可以使用 Visual Sniffer&#xff08;百度搜索&#xff09; 来捕捉提交的数据信息&#xff1a;1. 访问你需要站外提交的页面&#xff0c;比如 CSDN 登陆页 http://www.csdn.net/member/UserLogin.aspx2. 填写好需要的资料&#xff0c;比如用户名和密码&#xff0c;3. 打开 Visu…

网站安全堪忧,挂马、SQL注入,解决之道何在?

WEB应用的发展&#xff0c;使网站产生越来越重要的作用&#xff0c;而越来越多的网站在此过程中也因为存在安全隐患而遭受到各种攻击&#xff0c;例如网页被挂马、网站SQL注入&#xff0c;导致网页被篡改、网站被查封&#xff0c;甚至被利用成为传播木马给浏览网站用户的一个载…

网站缓存技术(Redis、Memcached、Ehcache)

Redis 是什么&#xff1f; 通常而言目前的数据库分类有几种&#xff0c;包括 SQL/NSQL,&#xff0c;关系数据库&#xff0c;键值数据库等等等. 分类的标准也不一&#xff0c;Redis本质上也是一种键值数据库的&#xff0c;但它在保持键值数据库简单快捷特点的同时&#xff0…

安装java的网站_安装java

windows中jdk安装&#xff1a;2.下载JDK后的安装根据提示进行&#xff0c;还有安装JDK的时候也会安装JRE&#xff0c;一并安装就可以了。安装JDK&#xff0c;安装过程中可以自定义安装目录等信息&#xff0c;例如我们选择安装目录为 C:\Program Files\Java\jdk1.8.0_91。3.配置…