java架构专家

java架构专家

    • 单体服务
      • 大型网站架构演进
      • 所需要具备的技术栈与能力
      • 单体架构设计与项目开发
      • 云服务器部署上线
    • nginx
      • 安装依赖环境
      • 显示默认首页过程解析
      • nginx 的进程模型
      • nginx 处理 web 请求机制
      • nginx 配置结构与指令语法
      • nginx 核心配置文件
      • nginx.pid 打开失败以及失败的解决方案
      • nginx 常用的命令
      • nginx 日志切割
      • 使用 nginx 为静态资源提供服务
      • 使用 gzip 压缩来提升请求效率
      • location 的匹配规则解析
      • dns 域名解析
      • 使用 SwitchHosts 模拟本地域名解析访问
      • nginx 的跨域
      • Nginx 中配置静态资源防盗链
      • nginx 的模块化体系
      • nginx 负载均衡
      • nginx 集群搭建
      • 使用 jmater 测试单节点与集群的并发异常
      • 负载均衡(反向代理服务器)
      • upstream 指令参数
      • nginx 控制浏览器缓存
    • LVS(linux virtual system)
    • 主从复制高可用 Redis 集群
      • springboot 整合 redis 实战
      • 分布式架构
        • 分布式搜索
        • DSL 搜索

单体服务

大型网站架构演进

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RFBM8E2q-1691565569026)(./01-无数据库.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kKoQRMBD-1691565569027)(./02-有数据库.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3kLyRrMQ-1691565569027)(./03-单体服务.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EiMQKOTd-1691565569027)(./04-服务存储分离.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qraLmI7Q-1691565569027)(./05-有缓存.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B9aT0wb8-1691565569028)(./06-服务节点集群.jpg)]
读写分离注意数据同步
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VuzH5uWB-1691565569028)(./07-读写分离.jpg)]
分库分表(数据接近千万级,使用分布式主键),注意数据同步
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-STE2ygZE-1691565569028)(./08-分库分表.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UCtbrnCs-1691565569029)(./09-增加搜索引擎.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-srxuhqjT-1691565569029)(./10-服务拆分.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5SVrQh27-1691565569029)(./11-公共服务拆分.jpg)]

所需要具备的技术栈与能力

微服务 + 搜索 + 日志处理 + 分库分表 + 优化

把控团队
系统分解与模块拆分
指导与培训
沟通与协调能力
抽象,举例,画图
软技能(项目管理/谈判)

单体架构设计与项目开发

springboot2.x
功能开发
个人中心
上线部署

前后端分离
分层架构

技术选型
后端
springboot
前端
jquery/vue

考虑因素
切合业务
社区活跃度
团队技术水平
版本更新迭代周期
试错精神
安全性
成功案例
开源精神

前后端分离开发模式

早期传统 web 开发
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bJ9hNuD3-1691565569029)(./12-早期web开发.jpg)]

前后端单页面交互, mvvm 开发模式
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QCqZietC-1691565569034)(./13-前后端分离单页面交互.jpg)]

项目分层设计原则
项目拆分与聚合
maven 聚合项目

父子模块相互依赖后需要进行安装(install)

数据库建模工具
www.pdman.cn

数据库外键
性能影响
热更新
降低耦合度
数据库分库分表

数据库配置
hikariCP
mybatis

mybatis 逆向生成工具

restflu web service
通信方式
信息传递
无状态
独立性
get -> /getOrder?id=1001
post -> /saveOrder
put -> /modifyOrder
delete -> deleteOrder?id=1001

可修改:
Editor -> code style -> inspections -> incorrect injection point autowiring in Spring bean compoments
Editor -> code style -> inspections -> Non recommended ‘field’ injections

service 注意事务

- 事务传播 - Propagation
- REQUIRED: 使用当前的事务,如果当前没有事务,则自己新建一个事务,子方法是必须运行在一个事务中的;
- 如果当前存在事务,则加入这个事务,成为一个整体。
- 举例:领导没饭吃,我有钱,我会自己买了自己吃;领导有的吃,会分给你一起吃。
- SUPPORTS: 如果当前有事务,则使用事务;如果当前没有事务,则不使用事务。
- 举例:领导没饭吃,我也没饭吃;领导有饭吃,我也有饭吃。
- MANDATORY: 该传播属性强制必须存在一个事务,如果不存在,则抛出异常
- 举例:领导必须管饭,不管饭没饭吃,我就不乐意了,就不干了(抛出异常)
- REQUIRES_NEW: 如果当前有事务,则挂起该事务,并且自己创建一个新的事务给自己使用;
- 如果当前没有事务,则同 REQUIRED
- 举例:领导有饭吃,我偏不要,我自己买了自己吃
- NOT_SUPPORTED: 如果当前有事务,则把事务挂起,自己不使用事务去运行数据库操作
- 举例:领导有饭吃,分一点给你,我太忙了,放一边,我不吃
- NEVER: 如果当前有事务存在,则抛出异常
- 举例:领导有饭给你吃,我不想吃,我热爱工作,我抛出异常
- NESTED: 如果当前有事务,则开启子事务(嵌套事务),嵌套事务是独立提交或者回滚;
- 如果当前没有事务,则同 REQUIRED。
- 但是如果主事务提交,则会携带子事务一起提交。
- 如果主事务回滚,则子事务会一起回滚。相反,子事务异常,则父事务可以回滚或不回滚。
- 举例:领导决策不对,老板怪罪,领导带着小弟一同受罪。小弟出了差错,领导可以推卸责任。

springboot 自动装配可以不在启动类加 @EnableTransactionManagement

电商项目核心功能

用户注册与登录
整合 swagger2
controller
Bo

cros

账号密码
邮箱验证
手机验证

cookie 与 session
cookie
以键值对的形式存储信息在浏览器
cookie 不能跨域,当前及父级域名可以取值
cookie 可以设置有效期
cookie 可以设置 path
session
基于服务器内存的缓存(非持久化), 可保存请求会话
每个 session 通过 sessionid 来区分不同请求
session 可设置过期时间
session 也是以键值对形式存在的

设置完 session,请求回返回 sessionid 给前端

整合 log4j
排除 springboot 自带的日志
手动加依赖

aop 切面拦截统计 service 调用时间

打印 sql 语句

简历
自我介绍+工作经历+项目经历+学历背景
自我介绍中要增加核心优势,放 github/博客链接
工作经历中重点的是项目内容,要参考技术挑战和项目对业务的影响程度

首页商品推荐

商品详情与评论渲染

分页插件
PageHelper

数据脱敏工具

商品的搜索与分页

分类设计与实现

购物车与订单
刷新购物车的相关数据
收货地址功能
订单实现流程
聚合支付中心(企业)

微信与支付宝支付

微信支付
用户 -> 微信客户端 -> 商户后台系统 -> 微信支付系统
调统一下单 api,返回预支付 code_url(2 个小时有效)
将链接生成二维码
异步通知商户结果(提供接口),告知支付通知接收情况(反馈)

前端 headers 携带信息

netapp

前端 js 轮询查询支付结果

支付宝支付

定时任务扫描关闭过期订单

映射本地静态资源,实现 webmvcconfigurer 的 addResourceHandlers 方法

文件上传大小限制

spring:
  servlet:
    multipart:
      max-file-size: 512000     # 文件上传大小限制为500kb
      max-request-size: 512000  # 请求大小限制为500kb

手动更新订单状态
http://localhost:8088/myorders/deliver?orderId=190827F2R9A6ZT2W

用户中心
订单管理
评价管理

云服务器部署上线

云服务器购买
安装 jdk
安装 tomcat
安装 mariaDB
打包 springboot

部署 tomcat 发布前端

内网互通(云服务器同地域)
4 核 8g/16g
8 核 32g
16 核 64g

centos7.x

java 环境检查安装
查询
rpm -qa | grep java -i
删除
rpm -e --nodeps xxx

下载解压 java

添加环境变量
vi /etc/profile

export JAVA_HOME=/usr/java/jdk1.9.0_191
export CLASSPATH=.:%JAVA_HOME%/lib/dt.jar:%JAVA_HOME%/lib/tools.jar
export PATH= P A T H : PATH: PATH:JAVA_HOME/bin

source /etc/profile

域名/二级域名

下载安装 mariadb (官方文档)
https://mariadb.org

grant all privileges on *.* to 'root'@'%' identified by 'xxx';
flush privileges;

修改项目配置
单体项目打包发布

cookie 异常问题

vi context.xml


单体架构总结
1,mvc 框架(springboot 多模块)
2,文件上传处理
3,事务管理
4,配置梳理
5,war 包发布

nginx

安装
nginx.org
download

安装依赖环境

1,安装 gcc 环境
yum install gcc-c++
2,安装 PCRE 库,用于解析正则表达式
yum install -y pcre pcre-devel
3,zlib 压缩和解压缩依赖
yum install -y zlib zlib-devel
4,ssl 安全的加密套接字协议层,用于 http 安全传输,也就是 https
yum install -y openssl openssl-devel

tar -zxvf nginx-1.16.1.tar.gz
创建临时目录
mkdir /var/temp/ngin -p
进入根目录,创建 makefile 文件

./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-p

你可能感兴趣的:(JAVA,架构,java,架构,开发语言)