孤九沫
发布于 2026-03-30 / 20 阅读
0
0

云原生商城项目架构梳理及其组件剖析

商城项目是他们业务部门使用面向普通用户的B2C 业务,一套传统部署的微服务架构

两套环境,一套负责平常的流量,另一套负责迎接短时间流量高峰。

D环境4台ng+4台前端+12台后端+4台中间件(konga+apollo+xxl-job+eureka)+云服务(pg+mongo+redis+rabbitmq+oss)

DC环境ng和ecs数量相应增加

按照流量进行梳理

1.waf应用防火墙:对CLB的流量进行清洗
案例:waf会防止CLB证书被篡改,对于接入WAF防火墙的负载均衡更换证书(证书来源必须是ssl控制台**)
这是我们需要先替换证书之后重新接入WAF。清除浏览器缓存再验证。
2.clb,证书在上面
3.4台nginx服务器,另外6台用于应对高并发的nginx服务器(一般情况下关机)
这4台nginx用的是经源码编译安装的openresty(包含nginx的所用功能同时支持lua脚本)
所有域名同时监听同一端口
对前端url插入securityKey字样,然后openresty对securityKey字样的流量进行限流,超过最大值返回503(服务器错误)防止被刷爆。
4.nginx只承担对html文件的内容分发,前端其他静态资源全部走CDN(内容分发网络),大致就是通过发布平台上传到OSS中,CDN设置OSS为源站。
5.静态资源同步至CDN的过程是先打包将产物/dist 中的文件进行梳理再利用js脚本进行OSS目录树进行规范排列,最后使用ossutil64进行同步。
6.生产环境ng配置剖析

user  root;  ##启动用户
worker_processes  auto;   ##工作进程数
error_log  /wls/applogs/nginx_logs/error.log  error;  ## 只记录 error 及以上级别 (error, crit, alert, emerg) ng默认的日志详细程度模板 debug(最详细)info(次详细重载信息)notice warm error crit
events {
    use epoll; 一种在编译安装能启动的模块,一种高效转发模式
    worker_connections  102400; ##最大连接数
}
include
http {
    include      /usr/local/openresty/nginx/conf/mime.types;  ##http块和全局块都能写include,默认文件类型对应表告诉客户端文件处理方式,别当二进制流下载了,在Content-Type 返回给客户端
    server_tokens off;  ##隐藏 Nginx 版本号,防止黑客利用特定版本漏洞攻击
    default_type  application/octet-stream;     ##未知文件类型当二进制流处理(下载)

    log_format  main  '$remote_addr - $host [$time_local] "$request" '  ##自定义的日志格式 main 定义名
                      '$status $body_bytes_sent "$http_referer" '   
                      '"$http_user_agent" "$http_x_forwarded_for" '
                      '"$upstream_addr" "$request_time" "$upstream_response_time"';
    access_log  /wls/applogs/nginx_logs/access.log  main;   ##运行日志及自定义格式
    recursive_error_pages on;
    proxy_intercept_errors on;    ##将后端的错误返回码进行了拦截统一返回标准状态吗页面
    sendfile        on;   ##零拷贝模式
    keepalive_timeout  65;   ##连接复用,超时时间
    gzip on;
    gzip_min_length 1k;   ##大于1k zip压缩
    gzip_buffers 4 16k;
    gzip_http_version 1.1;
    gzip_comp_level 6;       
    gzip_vary on;
    gzip_disable "MSIE [1-6]\.";
    gzip_types text/plain application/x-javascript application/css  text/css application/xml     text/javascript application/x-httpd-php image/jpeg image/gif image/png;
    client_max_body_size 50m;   ##允许上传的最大请求体或者文件
    lua_package_path "/wls/appsystems/nginx_app/lua/?.lua;;";   ##lua脚本路径
    lua_package_cpath "/wls/appsystems/nginx_app/lua/?.so;;";   ##lua扩展库路径
    lua_shared_dict redis_queue 100k;   
    lua_shared_dict redis_cluster_slot_locks 100k;
    init_worker_by_lua_file /wls/appsystems/nginx_app/lua/cron_getvalue_from_redis.lua;

upstream custadmin{
        least_conn;    ##最少连接
        server 10.80.0.14:8089 weight=1;   ##权重
        check interval=3000 rise=2 fall=5 timeout=1000 type=http;   ##健康检查策略
    }
    server {                        ##http://IP:8088/health 探活用的 http:// 指定协议
        listen 8088;
        server_name _;

        location /health {
            default_type text/plain;
            return 200 '_successful_';
        }

    location ~* /api/.*(api-docs|swagger-ui\.html) {   ##隐藏接口
        deny all;  # 阻止所有请求
        return 403;  # 返回 403 禁止访问
    }
  }
    include /wls/appsystems/nginx_app/config/jgj.conf;
}

7.对kong/konga 中间件的探究


评论