阶段三:基于LNMP企业架构部署CRMEB电商系统
LNMP 是一种非常成熟、高效的 Web 服务器架构组合,用于搭建高性能、稳定的动态网站环境。它由以下四个开源组件组成:
- Linux:操作系统(如 CentOS、Ubuntu,debian)
- Nginx:高性能 Web 服务器 / 反向代理服务器
- MySQL/MariaDB:关系型数据库管理系统
- PHP/Python:脚本语言(用于动态内容生成)
扩展
在企业级开发市场中,大约在2019年以后,用Java(阿里、京东等)和Go(字节、小米等)的越来越多,PHP在中高级开发市场中用的较少。
学习Nginx,以LNMP引入,可以简化很多开发上的知识,对初学者非常友好。
运维二十年演变发展史
项目开发流程
公司老板和产品经理根据市场调查,决定开发的一整套互联网产品。
互动社交+电商+用户论坛(BBS)
1、产品决策(老板+产品+UI设计);
2、代码开发(程序开发人员[前端开发[客户端页面或者APP]和后端开发[java php python node ruby]);
3、测试工作(测试人员);
4、部署上线(运维人员)
人员分配:
Developers 开发 : Operators 运维 = 8 : 1
项目周期:
技术人员在项目开发周期大概2-4个月(中小),大型项目开发周期大概6个月-8个月左右。
1 产品 + 1UI + 1 前端 + 6 个后端 + 1 个测试 + 1 运维团队(网络 + 运维 + 数据库) => 10人
10人 \* 3月 = 30人月
10人 \* 6月 = 60人月
10人 \* 12月 = 120人月
扩展
人月(Man-Month) 是项目管理中用于衡量工作量的常用单位,表示一个人在一个月内完成的工作量。它本质上是 “人力” 与 “时间” 的乘积,用于估算项目规模、规划资源或评估进度。
注意,这只是理论。与土木工程不同,软件工程的从业者更新换代很快。
一般来说,一个拥有5年实际经验的开发,和一个2年经验的开发相差很大的。将来大家如果走上项目管理,记得不能单单使用人月来估算项目投入,还需要考虑每个人员的软件能力成熟度。
企业架构分布式集群解决方案
集群:多台服务器在一起做同样的事 。
分布式 :多台服务器在一起做不同的事 。(同一个事情进行了分解)
咋理解集群与分布式?讲个故事: 小饭店原来只有一个厨师,切菜洗菜备料炒菜全干。后来客人多了,厨房一个厨师忙不过来,又请了个厨师,两个厨师都能炒一样的菜,这两个厨师的关系是集群。 为了让厨师专心炒菜,把菜做到极致,又请了个配菜师负责切菜,备菜,备料,厨师和配菜师的关系是分布式。 一个配菜师也忙不过来了,又请了个配菜师,两个配菜师关系是集群。
| 维度 | 集群 | 分布式 |
|---|---|---|
| 任务分配 | 执行相同任务 | 执行不同任务 |
| 任务类型 | 复制、冗余备份 | 模块拆分 |
| 典型场景 | 数据库集群 | 微服务架构(先作为了解即可) |
最终的架构图示
实现负载均衡LB、高可用HA、数据库主从复制M-S、读写分离R-W、缓存中间件[Memcached、Redis]、nosql[MongoDB]...
企业级 Web 架构
☆ ASP 架构:IIS 服务器软件
ASP(Active Server Pages,动态服务器页面)是微软推出的早期服务器端脚本技术(后续发展为 ASP.NET),用于生成动态网页内容(如用户登录、数据库查询结果展示)。
默认服务器软件:IIS(Internet Information Services)——微软 Windows 操作系统内置的 Web 服务器,深度集成于 Windows Server 环境,专为 ASP/ASP.NET 设计。
☆ LNMP 架构
LNMP = Linux + Nginx + MySQL + PHP(独立软件,占用9000)
<sheet sheet-id="KqHfZc" token="VitSsJmokhO6pMtaWMVcTez2n5c"></sheet>
Nginx:接收用户请求,请求处理后返回结果给用户。
注意:Nginx本身只能处理静态文件(.htm/.html、css、javascript),无法处理动态文件(.php、.py、.java),动态文件Nginx会通过反向代理。
PHP程序(底层进程:PHP-FPM):专门用于处理.php动态文件
MySQL:负责整个项目中数据的存储(用户数据、产品数据、订单数据、发货数据等等)
☆ JSP 架构:Nginx + Tomcat 组合
JSP(Java Server Pages)是基于 Java 的服务器端技术(如企业级 ERP、金融系统常使用 JSP),其运行依赖 Java 容器(负责解析 JSP 代码并转换为 Servlet 执行)。
由于 Nginx 本身不支持直接解析 JSP,因此需要与 Tomcat(Java 应用服务器)配合。
形成 Nginx(前端代理) + Tomcat(后端 Java 容器) 的架构。
业务背景
年份:2014-2016(互联网蓬勃发展)
发布产品类型:在线电商平台(CRMEB)
用户数量: 500左右(20% \~ 70%)
PV : 1000-3000
DAU: 100-300(日活,每天的独立访客数量)
参数解析:
PV(Page View):页面访问量,即页面浏览量或点击量,用户每次刷新一次即被计算一次
UV(Unique Visitor):独立访客,统计1天内访问某站点的用户数
DAU(Daily Active User),日活跃用户数量。常用于反映网站、互联网应用或网络游戏的运营情况
吞吐量:应用系统每秒钟最大能接受的用户访问量或者每秒钟最大能处理的请求数
QPS(Query Per Second):每秒钟处理完请求的次数,注意这里是处理完。具体是指发出请求到服务器处理完成功返回结果。可以理解在Server中有个Counter,每处理一个请求加1,1秒后Counter=QPS
TPS(Transactions Per Second):每秒钟处理完的事务次数,一般TPS是对整个系统来讲的。一个应用系统1s能完成多少事务处理,一个事务在分布式处理中,可能会对应多个请求,对于衡量单个接口服务的处理能力,用QPS比较多
并发量:系统能同时处理的请求数
RT(Response Time):响应时间,处理一次请求所需要的平均处理时间
计算公式:
QPS = 并发量 / 平均响应时间 并发量:同一时刻到达服务器的请求数
并发量 = QPS * 平均响应时间
100w * 100 = 10亿 /8w6秒 = 1300 QPS举个栗子:
假设服务并发量为1500,RT为150ms,那么该服务的QPS :
10000 = 1500(并发数)/ 0.15 (RT)
假如通过压测一台机器的QPS为500,那么该服务需要20+台这样的机器。
课下作业 - QPS
业界常见的企业级业务,我们的QPS一般是多少?
根据 DAU 评估 QPS;
根据 QPS 评估所需要的机器。
服务器准备
CPU 核数建议 >=4核,内存建议 >= 4G;
| 编号 | 主机名称 | IP地址 | 角色 |
|---|---|---|---|
| 1 | web01.itcast.cn | 192.168.88.101 | Web01 |
修改IP地址、主机名、域名解析
操作系统选择 CentOS Stream 9
[root@web01 ~]# ls /etc/NetworkManager/system-connections/
[root@web01 ~]# sudo vim /etc/NetworkManager/system-connections/ens160.nmconnection
------------------------------------------------------ 设置开始 -------------------------------------------------------------
[ipv4]
method=manual
addresses=192.168.88.106/24
gateway=192.168.88.2
dns=8.8.8.8;
[ipv6]
method=ignore
------------------------------------------------------ 设置结束 -------------------------------------------------------------
[root@web01 ~]# nmcli connection reload
[root@web01 ~]# nmcli c up ens160
[root@web01 ~]# nmcli device show ens160命令作用:
- 这条命令用于打开并编辑文件。进入编辑器后需要保存退出,修改才会写回文件。
执行结果:
- 编辑器会打开目标文件;保存并退出后文件内容才会改变。
关键参数:
注意事项:
**关键参数:**
**注意事项:**
关键参数:
注意事项:
配置方案:阿里镜像站、腾讯镜像站、华为镜像站、清华镜像站(推荐)
#!/usr/bin/perl
}
} }
} }
然后,在命令行中使用以下命令来执行它:注意事项:
**注意事项:**
centos镜像源有很多种,centos-base.repo基础源,epel-release扩展源
-----------------------------------------
自行配置chrony时间同步
**注意事项:**
注意事项:
**注意事项:**注意事项:
添加到系统路径
**注意事项:**
| 安装目录 | 数据目录 | 默认端口 | 套接字(关键) |
|---|---|---|---|
| /usr/local/mysql | /usr/local/mysql/data | 3306 | /tmp/mysql.sock |
安装路径:/usr/local/mysql
数据目录:/usr/local/mysql/data
端口:3306
socket文件存放路径:/tmp/mysql.sock
除了套接字问题,还需要注意的就是my.cnf配置文件,其加载顺序:
如果安装目录与/etc都有my.cnf,则/etc目录下的my.cnf会覆盖安装目录中的配置文件。
准备工作,提前卸载与mariadb相关软件包
注意事项:
参数说明:
-xf:可以解压任何tar类型的压缩包,如.tar.gz或.tar.xz格式压缩包
提示:使用tab键进行自动补全操作。
注意事项:
第三步:初始化数据库(可以实现数据库的初始化,而且会产生一个随机密码)
等价于绝对路径
注意: 这些是等价的,只选择一个就可以,不能一股脑全部执行,哈哈。
选项说明:
**注意事项:**命令说明:
删除默认配置文件my.cnf,然后初始化MySQL(如果全新系统,上面是没有这个配置文件的)
[mysqld] basedir=/usr/local/mysql datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock port=3306
log-error=/usr/local/mysql/data/mysql.err log-bin=/usr/local/mysql/data/binlog
server-id=10 character_set_server=utf8mb4
gtid-mode=on log-slave-updates=1 sql_mode=NO_ENGINE_SUBSTITUTION
**注意事项:**
添加环境变量,进入mysql,更改mysql的默认密码
注意事项:
#!/bin/bash
[mysqld] basedir=/usr/local/mysql datadir=/usr/local/mysql/data socket=/tmp/mysql.sock port=3306 log-error=/usr/local/mysql/data/mysql.err log-bin=/usr/local/mysql/data/binlog server-id=10 character_set_server=utf8mb4 gtid-mode=on log-slave-updates=1 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
[Unit] After=network.target After=syslog.target
[Service] User=mysql Group=mysql PrivateTmp=false
[Install] WantedBy=multi-user.target
**注意事项:**
SUCCESS! 注意事项:
1)更改数据库管理员root密码
2)安全初始化数据库 ... ... ... ... ... ...
**注意事项:**注意事项:
找到第1520行附近
**注意事项:**
PHP扩展,PHP连接MySQL,需要MySQL扩展
或
\
\
\
\
\
\
--enable-fileinfo注意事项:
(方便php、phpize、phpconfig查找使用)
**注意事项:**
<?php phpinfo();
nginx和php进行关联,告诉nginx,php在哪里:注意事项:
以下只是核心思路,具体配置看下一节
#
}让Nginx可以转发PHP代码到PHP-FPM
要想让Nginx可以转发PHP代码到PHP解析器(PHP-FPM),必须在nginx.conf文件中进行配置,把所有后缀名为.php的文件转发到当前计算机的9000端口。(PHP-FPM占用9000端口)
第一步:进入/usr/local/nginx目录,然后把conf/nginx.conf文件进行备份
**注意事项:**
<?php
phpinfo();
?>注意事项:
目标:能够通过搭建的LNMP环境部署各类PHP项目
版本约束很重要吗? 在实际的企业生产中,不同的版本,会导致开发环境和生产环境的错配,从而造成上线发布隐患。 举个例子,面试中常问一道题:
在测试环境明明是部署好好的,为什么转到生产环境就报错,你现在协助上线运维,会考虑从哪几个 方面去定位?
**注意事项:**注意事项:
提示
#先安装git工具
**注意事项:**注意事项:
**注意事项:**注意事项:
**注意事项:**
注意事项:
**注意事项:**注意事项:
提供更高效的进程控制和资源管理。
修改用户,监听地址
27
**注意事项:**
注意事项:
**注意事项:**
所以根据自己的情况,找到配置目录。
14
18
25注意事项:
**注意事项:**
所以根据自己的情况,查找配置。
#设置网站目录并配置伪静态
14
22
23
30注意事项:
或者
**注意事项:**
允许一些在严格模式下会被拒绝的操作(如不完整数据插入、类型隐式转换)。
#并进行mysql的重启,再重新回答浏览器进行配置
**注意事项:**
至此,项目安装完成。
通过浏览器http://IP地址,即可访问。
后端访问地址:http://IP地址/admin
后端登录账号密码,就是安装阶段设置的admin和密码
4、**课下作业:**