热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

前后端部署在两台服务器服务器配置要求_线上环境部署概览

点击上方“Java知音”,选择“置顶公众号”技术文章第一时间送达!作者:等你归去来cnblogs.comyougewep10327217.

点击上方“Java知音”,选择“置顶公众号”

技术文章第一时间送达!

作者:等你归去来

cnblogs.com/yougewe/p/10327217.html

(点击即可跳转阅读)

1. SpringBoot内容聚合

2. 面试题内容聚合

3. 设计模式内容聚合

4. 排序算法内容聚合

5. 多线程内容聚合

谈到线上环境,一般开发同学,不太容易接触到。即使接触到,也只是其中的冰山一角!

所以,其实说起线上环境的部署,咱们好像都有点懂,但是又都不一定完全懂!网上的知识无穷无尽,但往往都是各司一职,对于普通同学,很难窥其全貌!

所以,我今天就来说说,一些普通的线上环境的部署步骤,和一些脚本小技巧吧。只希望通过这篇文章,能够让大家有一个运维的全局观!

我将会分几条线来整理咱们的运维思路!

一、从理论上讲,我们应该怎么做?

1.针对的是什么样的用户群体,体量大概会有多少?

这是一个部署规划的前题。为啥呢?

一、如果你针对的是后台管理员,人数也不多,那么你可能只需要一个服务器就可以了,前后端也都可以部署在同一台服务器上;如果稍微考虑下单点故障问题,则顶多两台服务器搞定!

二、如果针对的是前端普通用户,那么,往往就会考虑多机部署,前后端分离,单点问题,负载均衡了;至于具体要部署多少台,则要根据你的用户情况来定了,当然,前期一般没必要部署很多台服务器!更多的考虑是横向扩展的能力。只要能支持横向扩展,则短期内,往往不用担心性能和架构问题!

2.为支持预估的用户量,大概需要多少的带宽?
有访问就会有流量产生,而预估的用户量,则是一个带宽资源需求的一个决断依据!

一般针对前期用户不太确定的场景,可以先买个 10M 左右的共享带宽,基本能够应付;经过一段时间的观察后,再进行带宽的变更也可以;

当然,考虑带宽,自然也会存在一个公网IP的问题,因为流量是从IP进来的。而在IP之前,则是域名的访问。域名问题则又涉及到DNS,不必细说!

公网IP可以是直接指向机器的,也可以是指向负载均衡器的。如果想要支持横向扩展,则IP的指向一定是一个负载均衡器。因为只有这样,当遇到流量突增,或者做活动的时候,才能更快速的进行扩容!

3.数据库规划如何?

数据在当下时代,算是重中之重了。机器没了可以再买,代码没了可以再写,但是数据没了就完蛋了!

数据库一般要遵从几个基本原则: 一、带宽要大;二、运算速度要快;三、要能承受足够大的运算空间;(即:带宽足够大/cpu核数够多/内存容量够大/最大并发连接数/…)

所以,一般不要在数据库上省钱,能多点就多点!

另外,也不要什么样的数据都往数据库(关系型数据库)存,搞清楚各类型数据库的强项与弱项,做出明智的选择。否则会带来很多不必要的麻烦!

4.应用要基于操作系统来部署还是基于容器来部署?

这是个决策性的问题!基于操作系统的部署,是一种比较传统和常见的部署方式。优点是,很多系统工具都是完善的,只要你大概知道要部署什么,部署下来一般不会有太多问题,因为这是个完整的系统。

但是,由于系统与系统之间可能不能完全一致,有各种各样的差异,所以,你在这个机器上运行成功的东西,在另外的机器上则不一定能成功。因此,基于系统的部署将会使我们的问题排查难度大大增加,而且移值性会很差。比如你在机器A上安装了10个软件,你可能配置了n个选项,但是,当你在安装B机器的时候,你并不能很好的利用原有的配置,你还得从头一个个地来!

因此,有另一个部署方案,基于容器的部署(我这里是基于docker容器的部署)。docker就类似于一个个的虚拟机,但是它更加轻量级,当一个docker部署好后,你可以任意复制到其他机器上运行,看起来很诱人吧。

不过,docker只是入门级容器,对于大量集群容器的管理,还是显得力不从心,当然你很容易找到另一个方案: Kubernetes (K8s); 你只要花上少许的时间了解下,你就可以应用了!

当然了,使用容器的方案,有没有什么缺点呢?应该是有的,比如本来可以基于系统的监控方案,因为接入容器后,监控指标则不一定适用了,当然现成的方案还是有的,不过得另外再花点时间研究了。再比如:如果容器出了问题,是否能排查出来,这也是另一个问题!

5.都有些什么样的基础设施或者中间件?

想要运行应用程序,自然是先考虑运行环境的。比如:应用需要 nginx 来做http服务器,用 tomcat 来做java web应用服务器,用redis来做缓存中间件,用zk来做应用协调中间件,用rabbitmq来做消息中间件,等等!

因此,要在代码跑起来之前,先要把这些环境给准备好咯。

准备这些中间件或基础设施之前,也要问下当下的形势,是否有高性能高可用应用需求?比如:是否需要集群部署,或者单机部署?往往集群部署又会依赖其他的中间件!也更复杂!

当然,这些都不是事。事儿是在出问题之后,能够有意识,能够猜测到问题发生的点!

6.应用代码应该怎样部署?

当基础环境就绪后,就应该让主角上场了。应用代码怎么部署?

最简单的: 通过ftp上传代码到服务器上后,一个个部署!这种方案是最原始的,也是在没有办法搞更好的方案的时候使用的,不应长期使用;

稍微好点的: 使用集成工具(如jenkins)进行打包,然后上传一个私有yum镜像服务器(yum 源)。然后在线进行yum 安装;这种方式,借助了集成工具,几个好处:

  • 可以检测代码合法性如:单元测试、代码规范(可能需要插件);

  • 对任何的改动有简单留档,可以备查的同时,也为代码的回滚提供了可能;

  • 减少了手动上传导致的包破坏的可能性;

  • 适合大规模应用;

再成熟点的: 再往后面,手动 yum 安装也已经太累了,所以急需一个部署平台,实现自动化部署;(这里的自动化部署可能就是基于CI集成部署的一种升级版)。总之,大大减小了人工参与程序,提升了效率,同时也保证了质量!当然,这种部署平台已经经过了严格的测试,出错的可能性也比较小了!

7.服务器的安全性?

不考虑服务器的安全性的应用,无异于自暴自弃。黑客无处不在,不过幸好现在系统也是越来越完善,只要稍加控制,即不那么容易被攻破了。但是如果放弃安全防护,则随便来一个菜鸟程序员就把你搞死了,那时的损失就大了。

网络安全是个很专业的领域,我不敢造次去谈它。不过我们可以简单的做下防护: 如防火墙、授权操作、病毒库等等。当然,如果使用xx云服务,则轻松方便多了,在后台点点设置几下搞定!

8.服务的可监控性?

无监控,不上线!

这是一个警示,如果线上服务没有监控,则所有线上的东西,都成了盲区,这对程序员GG们来说,简直太糟糕了,虽然他们很自信!

监控分两个方面:一是系统级别的监控;二是应用级别的监控;(一般忽略其他监控: 如网络)

系统级别的监控一般可以安装第三方的软件来解决: 如 zabbix, grafana …

而应用级别的监控,则需要自己拥有一套监控代码了,而这对初期项目,则往往比较吃力。当然,如果引入一些开源的解决方案也是可以的,比如 ELK, 做到分布式日志中心的作用的同时,也可以根据日志做相应的应用报错监控!然而这又涉及另外的机器费用和人力成本问题,也显得不那么简单了。

而如果使用xx云服务,则往往都会自带服务器监控的,可以很方便地查看到服务器情况,站在高层次预估应用是否存在潜藏的问题!

如上,就是一些个人觉得的在部署一整套线上环境的时候,需要考虑的事项!从理论上讲解了下个人见解,不对之处,请赐教!

二、接下来,我将给到一些实际的操作捷径或提示?(linux)

1.免密登录服务器?

在n服务器之间跳转,如果每次都要求输入密码,那确实太烦了。尤其在密码一般还很不容易记住的情况下!

所以,可以将一台服务器作为跳板机,在这台服务器上,可以免密地登录到允许的n台子服务器;

操作步骤有二:

# 1. 先使用 ssh-keygen 生成本机的key

2.服务器之间文件(夹)拷贝?

拷贝文件的目的有很多,比如:代码同步,文件同步,资源同步,甚至是会话同步….

# 1. 使用scp 拷贝文件

其中,scp一般是系统自带的命令,而rsync则需要自行安装服务。

scp复制你可以认为是增量复制,所以远程文件往往会越来越大,垃圾文件越来越多。

而rsync则是保持两端完全一致,可能会符合应用场景!但是,别忘了把rsync服务加入到开机启动项中!

3.快捷使用 ssh 等等命令,使用 tab 键进行信息补全?

当使用 ssh / scp 等等命令操作的时候,其操作对象往往 1.2.3.x 这样的ip显示,如果不能友好点,那确实太累了!我们可以如下操作,以实现 ssh 也能更好的记忆:

# 在文件 /root/.bashrc 中,添加脚本如下,使自动补全添加 ssh

如上补全工作,无需在所有服务器上进行操作,只需在相应的跳板机上提供功能即可!

4.简要 saltstack 搭建指南?

salt 是个方便易用的集群管理工具,比如你可以用于批量重启服务,全局搜索日志等等;

# 1. 安装, 仅需到相应机器上安装即可

5.简要集群复制shell脚本?

有时,你可能需要将你的应用发布到n台服务中,你可以直接改如下shell,也可以依赖于salt这样的高级工具进行发布!shell 参考如下:

#!/bin/bash

6.简要docker搭建指南?

docker 作为一个容器化的基石,一出世就被追棒。包括现在的 k8s ,也是基于docker的。docker 可以让你在一处搭建,处处运行,从而避免每次新买机器就要搞很久的尴尬局面;其搭建也是很简单的(简单应用):

为方便任意发挥,我们可以基于centos这种系统级别的镜像进行创建自己的image;

# docker 安装:

7.定制你的登录欢迎语?

由于可能存在线上环境与测试环境共存的情况,一不小心的切换错误,就可能导致不可挽回的损失。所以,如果我们能在登录的时候,做一个简单的提示,那么就会少一点出错的可能性。所以,订制你的登录欢迎语吧!

# 修改登录欢迎语 vim /etc/motd

这样,用户登录后,就会清楚的知道自己是在操作生产环境了!

8.更方便的查看nginx的访问日志?

对于后端的日志而言,往往都是主动打印到某个固定位置,从而开发人员可以直接使用 tail -f xxx.log 进行日志的查看!

然而对于前端的代码而言,则往往没有相应的开发日志,唯一可以借助的就是 http 服务器的日志来排查问题了!

所以,比如使用 nginx 作为 http 服务器,那么就应该把尽可能多的有用日志打印出来。那么,如何快速查看 nginx 日志,则是有必要的!比如我们可以这样:

# vim /usr/bin/log_nginx_host , 使用 log_nginx_host 直接查看所有 nginx 日志

如上,将会把访问日志与错误日志一起打印出来,从而快速定位问题!

(点击即可跳转阅读)

1. SpringBoot内容聚合

2. 面试题内容聚合

3. 设计模式内容聚合

4. 排序算法内容聚合

5. 多线程内容聚合

6. 7个IntelliJ IDEA必备插件,提高编码效率

7. IntelliJ IDEA 从入门到上瘾教程,2019图文版!

看完本文有收获?请转发分享给更多人

a35f6400eab08ddb3cfef536dd96fa15.png




推荐阅读
  • 负载均衡基础概念与技术解析
    随着互联网应用的不断扩展,用户流量激增,业务复杂度显著提升,单一服务器已难以应对日益增长的负载需求。负载均衡技术应运而生,通过将请求合理分配到多个服务器,有效提高系统的可用性和响应速度。本文将深入探讨负载均衡的基本概念和技术原理,分析其在现代互联网架构中的重要性及应用场景。 ... [详细]
  • 西北工业大学作为陕西省三所985和211高校之一,虽然在农业和林业领域不如某些顶尖院校,但在航空航天领域的实力尤为突出。该校的计算机科学专业在科研和教学方面也具有显著优势,是考研的理想选择。 ... [详细]
  • ZeroMQ在云计算环境下的高效消息传递库第四章学习心得
    本章节深入探讨了ZeroMQ在云计算环境中的高效消息传递机制,涵盖客户端请求-响应模式、最近最少使用(LRU)队列、心跳检测、面向服务的队列、基于磁盘的离线队列以及主从备份服务等关键技术。此外,还介绍了无中间件的请求-响应架构,强调了这些技术在提升系统性能和可靠性方面的应用价值。个人理解方面,ZeroMQ通过这些机制有效解决了分布式系统中常见的通信延迟和数据一致性问题。 ... [详细]
  • Nginx入门指南:从零开始掌握基础配置与优化技巧
    Nginx入门指南:从零开始掌握基础配置与优化技巧 ... [详细]
  • 从无到有,构建个人专属的操作系统解决方案
    操作系统(OS)被誉为程序员的三大浪漫之一,常被比喻为计算机的灵魂、大脑、内核和基石,其重要性不言而喻。本文将详细介绍如何从零开始构建个人专属的操作系统解决方案,涵盖从需求分析到系统设计、开发与测试的全过程,帮助读者深入理解操作系统的本质与实现方法。 ... [详细]
  • HBase在金融大数据迁移中的应用与挑战
    随着最后一台设备的下线,标志着超过10PB的HBase数据迁移项目顺利完成。目前,新的集群已在新机房稳定运行超过两个月,监控数据显示,新集群的查询响应时间显著降低,系统稳定性大幅提升。此外,数据消费的波动也变得更加平滑,整体性能得到了显著优化。 ... [详细]
  • 深入解析Wget CVE-2016-4971漏洞的利用方法与安全防范措施
    ### 摘要Wget 是一个广泛使用的命令行工具,用于从 Web 服务器下载文件。CVE-2016-4971 漏洞涉及 Wget 在处理特定 HTTP 响应头时的缺陷,可能导致远程代码执行。本文详细分析了该漏洞的成因、利用方法以及相应的安全防范措施,包括更新 Wget 版本、配置防火墙规则和使用安全的 HTTP 头。通过这些措施,可以有效防止潜在的安全威胁。 ... [详细]
  • 使用Boost.Asio进行异步数据处理的应用程序主要依赖于两个核心概念:I/O服务和I/O对象。I/O服务抽象了操作系统接口,使得异步操作能够高效地执行。I/O对象则代表了具体的网络资源,如套接字和文件描述符,通过这些对象可以实现数据的读写操作。本文详细介绍了这两个概念在Boost.Asio中的应用及其在网络编程中的重要性。 ... [详细]
  • Django框架进阶教程:掌握Ajax请求的基础知识与应用技巧
    本教程深入探讨了Django框架中Ajax请求的核心概念与实用技巧,帮助开发者掌握异步数据交互的方法,提升Web应用的响应速度和用户体验。通过实例解析,详细介绍了如何在Django项目中高效实现Ajax请求,涵盖从基础配置到复杂场景的应用。 ... [详细]
  • Linux学习精华:程序管理、终端种类与命令帮助获取方法综述 ... [详细]
  • 黄聪:MySQL主从复制配置,实现高效读写分离
    大型网站为应对高并发访问,不仅需要在前端实现分布式负载均衡,还需在数据业务和访问层采取有效措施。采用传统的数据结构已无法满足需求,通过配置MySQL主从复制,可实现高效的读写分离,显著提升系统性能和稳定性。 ... [详细]
  • 利用Jenkins与SonarQube集成实现高效代码质量检测与优化
    本文探讨了通过在 Jenkins 多分支流水线中集成 SonarQube,实现高效且自动化的代码质量检测与优化方法。该方案不仅提高了开发团队的代码审查效率,还确保了软件项目的持续高质量交付。 ... [详细]
  • 前言: 网上搭建k8s的文章很多,但很多都无法按其说明在阿里云ecs服务器成功搭建,所以我就花了些时间基于自己成功搭建k8s的步骤写了个操作手册,希望对想搭建k8s环境的盆友有所帮 ... [详细]
  • 深入解析Java中的轮询与加权轮询负载均衡算法实现
    网上找了不少负载均衡算法的资源,都不够全面,后来自己结合了网上的一些算法实现,下面这篇文章主要给大家介绍了关于Java负载均衡算法实现之轮询和加权轮询的相关资料,文中通过示例代码介 ... [详细]
  • (图注:Windows自带的性能监控,红色表示CPU占用,绿色表示QPS)今天中午 ... [详细]
author-avatar
玉萍逸杰762_840
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有