从零搭建Web网站

news/2024/5/9 15:21:34/文章来源:https://blog.csdn.net/weixin_34364071/article/details/85951368

前言

工作也有几多年了,无论是身边遇到的还是耳间闻到的,多多少少也积攒了自己的一些经验和思考,当然,博主并没有太多接触高大上的分布式架构实践,相对比较零碎,随时补充。俗话说得好,冰冻三尺非一日之寒,滴水穿石非一日之功,罗马也不是一天就建成的,当然对于我们开发人员来说,一个好的架构也不是一蹴而就的。

初始搭建

开始的开始,就是各种框架一搭,然后扔到Tomcat容器中跑就是了,这时候我们的文件、数据库、应用都在一个服务器上。

 

服务分离

随着系统的的上线,用户量也会逐步上升,很明显一台服务器已经满足不了系统的负载,这时我们就要在服务器还没有超载时,提前做好准备。

由于我们是单体架构,优化架构在短时间内是不现实的,增加机器是一个不错的选择。这时,我们可能要把应用和数据库服务单独部署,如果有条件也可以把文件服务器单独部署。

 

反向代理

为了提升服务处理能力,我们在Tomcat容器前加一个代理服务器,我一般使用Nginx,当然你如果更熟悉Apache也未尝不可。

用户的请求发送给反向代理,然后反向代理把请求转发到后端的服务器。

严格意义上来说,Nginx是属于Web服务器,一般处理静态HTML、CSS、JS请求,而Tomcat属于Web容器,专门处理JSP请求,当然Tomcat也是支持html的,只是效果没Nginx好而已。

反向代理的优势,如下:

  • 隐藏真实后端服务
  • 负载均衡集群
  • 高可用集群
  • 缓存静态内容实现动静分离
  • 安全限流
  • 静态文件压缩
  • 解决多个服务跨域问题
  • 合并静态请求(HTTP/2.0后已经被弱化)
  • 防火墙
  • SSL以及http2

动静分离

 

基于以上Nginx反向代理,我们还可以实现动静分离,静态请求如HTML、CSS、JS等请求交给Nginx处理,动态请求分发给后端Tomcat处理。

Nginx 升级到1.9.5+可以开启HTTP/2.0时代,加速网站访问。

当然,如果公司不差钱,CDN也是一个不错的选择。

服务拆分

在这分布式微服务已经普遍流行的年代,其实我们没必要踩过多的坑,就很容易进行拆分。市面上已经有相对比较成熟的技术,比如阿里开源的Dubbo(官方明确表示已经开始维护了),Spring家族的Spring Cloud,当然具体如何去实施,无论是技术还是业务方面都要有很好的把控。

Dubbo 

SpringCloud

  • 服务发现——Netflix Eureka
  • 客服端负载均衡——Netflix Ribbon
  • 断路器——Netflix Hystrix
  • 服务网关——Netflix Zuul
  • 分布式配置——Spring Cloud Config

微服务与轻量级通信

  • 同步通信和异步通信
  • 远程调用RPC
  • REST
  • 消息队列

持续集成部署

服务拆分以后,随着而来的就是持续集成部署,你可能会用到以下工具:Docker、Jenkins、Git、Maven。

图片源于网络,基本拓扑结构如下所示:

 

整个持续集成平台架构演进到如下图所示:

 

服务集群

Linux集群主要分成三大类( 高可用集群, 负载均衡集群,科学计算集群)。其实,我们最常见的也是生产中最常接触到的就是负载均衡集群。

 

负载均衡实现

  • DNS负载均衡,一般域名注册商的dns服务器不支持,但博主用的阿里云解析已经支持
  • 四层负载均衡(F5、LVS),工作在TCP协议下
  • 七层负载均衡(Nginx、haproxy),工作在Http协议下

分布式session

大家都知道,服务一般分为有状态和无状态,而分布式sessoion就是针对有状态的服务。

分布式Session的几种实现方式

  • 基于数据库的Session共享
  • 基于resin/tomcat web容器本身的session复制机制
  • 基于oscache/Redis/memcached 进行 session 共享。
  • 基于cookie 进行session共享

分布式Session的几种管理方式

Session Replication 方式管理 (即session复制)

  • 简介:将一台机器上的Session数据广播复制到集群中其余机器上
  • 使用场景:机器较少,网络流量较小
  • 优点:实现简单、配置较少、当网络中有机器Down掉时不影响用户访问
  • 缺点:广播式复制到其余机器有一定廷时,带来一定网络开销

Session Sticky 方式管理

  • 简介:即粘性Session、当用户访问集群中某台机器后,强制指定后续所有请求均落到此机器上
  • 使用场景:机器数适中、对稳定性要求不是非常苛刻
  • 优点:实现简单、配置方便、没有额外网络开销
  • 缺点:网络中有机器Down掉时、用户Session会丢失、容易造成单点故障

缓存集中式管理

  • 简介:将Session存入分布式缓存集群中的某台机器上,当用户访问不同节点时先从缓存中拿Session信息
  • 使用场景:集群中机器数多、网络环境复杂
  • 优点:可靠性好
  • 缺点:实现复杂、稳定性依赖于缓存的稳定性、Session信息放入缓存时要有合理的策略写入

目前生产中使用到的

  • 基于tomcat配置实现的MemCache缓存管理session实现(麻烦)
  • 基于OsCache和shiro组播的方式实现(网络影响)
  • 基于spring-session+redis实现的(最适合)

负载均衡策略

负载均衡策略的优劣及其实现的难易程度有两个关键因素:负载均衡算法,对网络系统状况的检测方式和能力。

1、rr 轮询调度算法。顾名思义,轮询分发请求。

优点:实现简单

缺点:不考虑每台服务器的处理能力

2、wrr 加权调度算法。我们给每个服务器设置权值weight,负载均衡调度器根据权值调度服务器,服务器被调用的次数跟权值成正比。

优点:考虑了服务器处理能力的不同

3、sh 原地址散列:提取用户IP,根据散列函数得出一个key,再根据静态映射表,查处对应的value,即目标服务器IP。过目标机器超负荷,则返回空。

4、dh 目标地址散列:同上,只是现在提取的是目标地址的IP来做哈希。

优点:以上两种算法的都能实现同一个用户访问同一个服务器。

5、lc 最少连接。优先把请求转发给连接数少的服务器。

优点:使得集群中各个服务器的负载更加均匀。

6、wlc 加权最少连接。在lc的基础上,为每台服务器加上权值。算法为:(活动连接数*256+非活动连接数)÷权重 ,计算出来的值小的服务器优先被选择。

优点:可以根据服务器的能力分配请求。

7、sed 最短期望延迟。其实sed跟wlc类似,区别是不考虑非活动连接数。算法为:(活动连接数+1)*256÷权重,同样计算出来的值小的服务器优先被选择。

8、nq 永不排队。改进的sed算法。我们想一下什么情况下才能“永不排队”,那就是服务器的连接数为0的时候,那么假如有服务器连接数为0,均衡器直接把请求转发给它,无需经过sed的计算。

9、LBLC 基于局部性的最少连接。均衡器根据请求的目的IP地址,找出该IP地址最近被使用的服务器,把请求转发之,若该服务器超载,最采用最少连接数算法。

10、LBLCR 带复制的基于局部性的最少连接。均衡器根据请求的目的IP地址,找出该IP地址最近使用的“服务器组”,注意,并不是具体某个服务器,然后采用最少连接数从该组中挑出具体的某台服务器出来,把请求转发之。若该服务器超载,那么根据最少连接数算法,在集群的非本服务器组的服务器中,找出一台服务器出来,加入本服务器组,然后把请求转发之。

读写分离

MySQL主从配置,读写分离并引入中间件,开源的MyCat,阿里的DRDS都是不错的选择。

如果是对高可用要求比较高,但是又没有相应的技术保障,建议使用阿里云的RDS或者Redis相关数据库,省事省力又省钱。

全文检索

如果有搜索业务需求,引入solr或者elasticsearch也是一个不错的选择,不要什么都塞进关系型数据库。

缓存优化

引入缓存无非是为了减轻后端数据库服务的压力,防止其"罢工"。

常见的缓存服务有,Ehcache、OsCache、MemCache、Redis,当然这些都是主流经得起考验的缓存技术实现,特别是Redis已大规模运用于分布式集群服务中,并证明了自己优越的性能。

消息队列

异步通知:比如短信验证,邮件验证这些非实时反馈性的逻辑操作。

流量削锋:应该是消息队列中的常用场景,一般在秒杀或团抢活动中使用广泛。

日志处理:系统中日志是必不可少的,但是如何去处理高并发下的日志确是一个技术活,一不小心可能会压垮整个服务。工作中我们常用到的开源日志ELK,为嘛中间会加一个Kafka或者redis就是这么一个道理(一群人涌入和排队进的区别)。

消息通讯:点对点通信(个人对个人)或发布订阅模式(聊天室)。

日志服务

消息队列中提到的ELK开源日志组间对于中小型创业供公司是一个不错的选择。

安全优化

以上种种,没有安全做保证可能都会归于零。

  • 阿里云的VPN虚拟专有网络以及安全组配置
  • 自建机房的话,要自行配置防火墙安全策略
  • 相关服务访问,比如MySQL、Redis、Solr等如果没有特殊需求尽量使用内网访问并设置鉴权
  • 尽量使用代理服务器,不要对外开放过多的端口
  • https配合HTTP/2.0也是个不错的选择 

转载至 http://developer.51cto.com/art/201710/555674.htm

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

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

相关文章

如何让你的网站拥有网盘功能, 一分钟搞定

网站可以说是网上的门面,用户进来就能看到门面里面所展示的商品或者资讯信息。我们如何充分利用这个门面储存更多的东西能。今天教大家一个实用的方法,简单高效的将wordpress程序网站秒变私有网盘,当然不会网站正常使用,只是多了一…

网站安全检测之图片验证码

2019独角兽企业重金招聘Python工程师标准>>> 在对网站安全进行整体的安全检测的时候,用户登陆以及用户留言,评论,设置支付密码,以及一些网站功能方面都会用到图片验证码,针对于验证码我们SINE安全对其进行了…

制作chrome插件/扩展程序,禁止谷歌浏览器访问某些网站

简单地说,浏览器插件,可以大大的扩展你的浏览器的功能。包括但不仅限于这些功能: 捕捉特定网页的内容捕捉HTTP报文捕捉用户浏览动作,改变浏览器地址栏/起始页/书签/Tab等界面元素的行为与别的站点通信,修改网页内容………

更改了react-redux 官方网站的todolist结构

最近在学习胡子大哈的react小书,内容讲的由浅入深,很值得react,react-redux小白一读。 废话不多说直接上地址:http://huziketang.mangojuice.top/books/react/ react小书看过两遍,而且都认真跟着操作了,里面…

大型网站技术架构(一)大型网站架构演化

2019独角兽企业重金招聘Python工程师标准>>> 看完了有一本书,就应该有所收获,有所总结,最近把《大型网站技术架构》一书给看完了,给人的印象实在深刻,再加上之前也搞过书本上讲的反向代理和负载均衡以及ses…

支付宝手机网站支付接入详细教程

点击查看 商户系统按照手机网站支付接口alipay.trade.wap.payAPI的参数规范生成订单数据,然后在前端页面通过Form表单的形式请求到支付宝。 不是商户系统直接调用的支付宝接口,而是支付宝的工具类生成一个form表单,然后返回给前端页面&#…

一个在线练习sql语句的网站

不用自己搭建数据库,轻量简单,方便进行练习及测试 地址为:http://sqlfiddle.com/ 一个不错的练习题汇总 https://blog.csdn.net/qq_41936662/article/details/80393172

网站收藏(Java)虫洞栈

字节跳动的小傅哥 设计模式 bugstack 虫洞栈https://bugstack.cn/用Java实现JVM, Netty4.x专题 中间件开发 领域驱动设计 全链路监控 字节码编程 Home fuzhengwei/CodeGuide Wiki GitHubhttps://github.com/fuzhengwei/CodeGuide/wiki

Python程序员一般都是靠这几个网站赚外快,赶紧收藏

当下python需求量还是挺大的,对于想要做兼职的程序员还是挺友好的:起码不用愁找不到;目前来看,其兼职方向大致有三:开发、爬虫、数据分析。 就开发来说,目前python的轮子在Github上一抓一大把,…

Python兼职有些坑你一定要知道,附接活网站

说点想说的 程序员就是当今时代的手艺人,程序员可以通过个人的技术来谋生。而在工作之余接私单可以作为一种创富的途径,受到程序员的广泛认可。说句实在话,现在这个时代,很多人仅靠主业顶多维持基本生活,想让自己、家…

如何快速搭建自己的网站:阿里云+宝塔+wordpress

自媒体快速发展的时代,很多人都有搭建自己网站的想法,这里我就教大家一种简单的搭建方法。 搭建自己的网站,可以使用网上的免费资源,当然免费的资源需要你花时间去找,而且有些资源不是很稳定。 本教程是基于阿里云的…

程序员必备网站收集

一、源码学习 GitHub:https://github.com 开发者非常重要的网站,程序员都用过,代码托管,上面有很多资源,可以根据自己的需求去查找源码,不用重复造轮子。上面有很多优秀的程序员,你可以和他们开…

Python程序员:8个接私活的网站,只要你有码,那“我”就有钱

前言: “好马配好鞍,兵器不趁手”好马配上好的马鞍那是如虎添翼,兵器不趁手那是“江湖大忌”放在古时候与人过招时,一不留神会丢掉性命的,两者的区别可想而知!照这么说的话,程序员的键盘就是武…

我,研究生在读,推荐自学Python必去的5个网站!

hi,今天和大家分享我过去两年自学Python的学习网站~ 最近几年,Python刮起了大风,仿佛不学Python就会比同龄人落后一步,学习Python是不是只是跟风现象呢? 诚然,Python于学术研究于职场发展都有…

iis服务器上网站w3wp.exe占用内存过高!

iis服务器上网站过段时间就无法打开,回收进程,关闭网站都没作用!只有重启服务器,网站才能恢复正常访问,但是过段时间网站就有打不开了! 最后在任务管理器里面发现了问题:w3wp.exe占用内存过高!…

帝国cms手机和pc站数据同步建站教程

帝国cms手机和pc站数据同步建站教程 (2018-03-20 17:18:08) 转载▼ 标签: 帝国cms同步网站 帝国cms手机端同步 http://tangjiusheng.com/EmpireCMS/90.html 帝国cms功能强大的很,百万数据更新几秒内完成,非常的棒我很喜欢&#xff0c…

解决宝塔管理面板用户新开网站空间无法使用独立ftp功能的问题

问题:我的学员用宝塔模板搭建好服务器环境以后,添加了ftp账号,却链接不起来,通过我的不断的研究,问题终于被我解决了,于是在这里一起分享给大家。 现在建站越来越多的人使用服务器了,而且大部分…

JS 劫持来源网站并做指定跳转

JS 劫持来源网站并做指定跳转 如何检测自己的网站是否被劫持了呢?有个工具可以检测 工具:IIS7网站监测工具 它可以让你知道网站是否被黑,被入侵,被改标题,被挂黑链等等功能,让你作为站长能清楚知道自己网…

IIS 7 一个网站下添加多个应用程序

IIS 7 一个网站下添加多个应用程序 业务场景:一个API两个版本: 1,发布文件目录 2,建好三个应用程序池,注意的是主网站程序池的.net framework 版本要选择无托管代码 3,新建网站 4,把两个子目录…

安装360网管版本,网站80端口被360entpulish服务占用,如何修改80端口!

方法一:安装完360网管版本后配置 可在配置向导中设置非80端口! 方法二:登录360网管后控制中心配置 登录网管地址 更改端口