网站开发费入什么科目哪个网站做农产品

news/2025/9/24 5:48:46/文章来源:
网站开发费入什么科目,哪个网站做农产品,免费建站赚钱,用模板建商城购物网站使用前提: 项目重构了,旧项目还在线上运行,新项目准备替换线上的旧项目 最终目标: 要实现实时切换新旧项目,保证如果新项目上线后有问题,可以立刻快速的将流量切回旧项目 方案: 关于abtest的基本原理本文不再多说,本文重点是实践#xff0c;先看图 如上图所示,用户访问的…使用前提: 项目重构了,旧项目还在线上运行,新项目准备替换线上的旧项目 最终目标: 要实现实时切换新旧项目,保证如果新项目上线后有问题,可以立刻快速的将流量切回旧项目 方案: 关于abtest的基本原理本文不再多说,本文重点是实践先看图 如上图所示,用户访问的永远都是dns,单独集群部署,由dns上的配置决定后面的访问的集群 旧项目nginx和旧项目tomcat在一组linux上部署 新项目nginx和新项目tomcat在一另组linux上部署 只有旧项目的时候,就是dns直接打到旧项目nginx 升级新项目后,需要将新项目无感知的上线,并换下旧项目 第一步是嵌入新项目nginx,dns将流量打到新项目nginx,再转到旧项目nginx, 稳定后再下掉dns打到旧项目nginx的流量,最终结果就是图中第一步所示 第二步是使用lua模块引入外部redis,在nginx中配置,将新项目nginx的流量可配置的转到新项目tomcat 第三步是备用步骤,如果切到新项目后,发现线上有问题,就可以通过操作redis来控制新项目nginx的负载分配,可以达到几秒内迅速切回旧项目 有人会问,为什么不直接在dns这一层来做负载分配,其实也是可以的,只不过对于大的公司来说,这一层普通开发一般没有操作权限,即使可以通过一些配置完成,其中也经过了很多转换,导致切换一次所耗费的时间达到一分钟以上,而本次想实现的目标是快速切流量,所以用了本地的nginx 具体实现 新项目的nginx–config核心逻辑: #首先在机器上要安装lua模块,来支持lua语言 lua_package_path /export/servers/lualib/?.lua;;; lua_package_cpath /export/servers/lualib/?.so;;; resolver 172.16.16.16 10.16.16.16;#这里加载了init.lua和worker.lua init_by_lua_file /export/Packages/新项目名/latest/WEB-INF/classes/conf/abtesting/init.lua; init_worker_by_lua_file /export/Packages/新项目名/latest/WEB-INF/classes/conf/abtesting/worker.lua;#设置新项目 upstream tomcat_mytomcat01 {server 127.0.0.1:1601 weight10 max_fails2 fail_timeout30s ; } #设置旧项目01 upstream tomcat_oldtomcat01 {server XX.XXX.XXX.XX1:80 weight10 max_fails2 fail_timeout30s ;server XX.XXX.XXX.XX2:80 weight10 max_fails2 fail_timeout30s ; } #设置旧项目02(原来是两个项目,重构后合成一个项目,所以要有旧项目02) upstream tomcat_oldtomcat02 {server XX.XXX.XXX.XX3:80 weight10 max_fails2 fail_timeout30s ;server XX.XXX.XXX.XX4:80 weight10 max_fails2 fail_timeout30s ; }#nginx日志格式 log_format newmain $remote_addr - $http_x_forwarded_for - $remote_user [$time_local]$request $status $bytes_sent $http_referer $http_user_agent $gzip_ratio - $http_x_proto - $host ; server {listen 80;server_name *.*.com ;access_log /export/servers/nginx/logs/otcfront.jd.com/otcfront.jd.com_access.log newmain;error_log /export/servers/nginx/logs/otcfront.jd.com/otcfront.jd.com_error.log warn;root /export/Packages/项目名/latest/;#默认流量打在新项目set $default_backend tomcat_mytomcat01;location / {proxy_next_upstream http_500 http_502 http_503 http_504 error timeout invalid_header;proxy_set_header Host $host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;expires 0;#首先将默认值给backend,proxy_pass最终会以backend的值为准set $backend $default_backend;#匹配host,判断是否修改backend的值,以(www.zhangs01.com为例,是旧项目01对应的域名)if ($host ~* ^www\.zhangs01\.com$){#先默认将流量打到旧项目上set $backend tomcat_oldtomcat01 ;#如果读出来在diversion01.lua中有对$backend的值做修改,则使用新的值rewrite_by_lua_file /export/Packages/新项目名/latest/WEB-INF/classes/conf/abtesting/diversion01.lua;}#匹配host,判断是否修改backend的值,以(www.zhangs02.com为例,是旧项目02对应的域名)if ($host ~* ^www\.zhangs02\.com$){#先默认将流量打到旧项目上set $backend tomcat_oldtomcat02 ;#如果读出来在diversion02.lua中有对$backend的值做修改,则使用新的值rewrite_by_lua_file /export/Packages/新项目名/latest/WEB-INF/classes/conf/abtesting/diversion02.lua;}#最终打到backend对应的地方proxy_pass http://$backend;}location /logs/ {autoindex off;deny all;} }上面一段nginx中涉及到四个lua文件 init.lua— 初始化参数 worker.lua— 真正的分流逻辑 diversion01.lua— 旧项目01的backend设置diversion02.lua−−−旧项目02的backend设置 diversion02.lua--- 旧项目02的backend设置diversion02.lua−−−旧项目02的backend设置 init.lua核心代码: --定义全局变量 global_configs {--在diversion01.lua中会用到这个值[divEnable01] false,--在diversion02.lua中会用到这个值[divEnable02] false,--连接redis的必要参数[redis] {ap_hostXXX.XX.XXX,ap_portXXXX,ap_key/redis/XXXXXXXXXXXX(redis地址)} }worker.lua核心代码: --初始化延迟时间,10秒 local start_delay 10 --定义ngx.timer.at指令,这个指令中可以设置回调函数,回调函数中再执行这个指令,就可以循环起来 local new_timer ngx.timer.at local log ngx.log local ERR ngx.ERR local refresh local get_redis local close_redis--初始化两个redis的key,对应的value值是true就代表切到新项目,false就代表切到旧项目 local switch_key_01 abtest:switch:global01 local switch_key_02 abtest:switch:global02--定义获取redis方法 get_redis function()local redis require resty.redislocal red redis:new()local ok, err red:connect(global_configs[redis][ap_host],global_configs[redis][ap_port])if ok and global_configs[redis][ap_key] thenok, err red:auth(global_configs[redis][ap_key])endreturn red, ok, err end--定义关闭redis连接方法 close_redis function(red)if not red thenreturnendlocal ok, err red:close()if not ok thenngx.log(ngx.ERR,fail to close redis connection : , err)end end--核心逻辑 local function do_refresh()--获取redislocal red, ok, err get_redis()--判活if not ok thenlog(ERR, redis is not ready!)returnend-- refresh global switch01--获取key为switch_key_01的value值,用变量enable01保存local enable01, err red:get(switch_key_01)if err thenlog(ERR, err)elseif ngx.null ~ enable01 then--如果enable01 不为null,并且enable01的值是true,就将全局变量global_configs[divEnable01]的值设置成true,否则就是falseglobal_configs[divEnable01] (true enable01) and true or falseendend-- refresh global switch02,同理01local enable02, err red:get(switch_key_02)if err thenlog(ERR, err)elseif ngx.null ~ enableTrade thenglobal_configs[divEnable02] (true enable02) and true or falseendendreturn close_redis(red) end--刷新方法,这里当成一个回调函数来用,被后面的new_timer调用 refresh function(premature)if not premature thenlog(ERR, rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrefresh)--调用核心逻辑(从redis中取key,判断value的值,从而确定流量分给谁)do_refresh()--再次调用这个new_time,构成持续循环local ok, e new_timer(start_delay, refresh)if not ok thenlog(ERR, failed to create timer: , e)returnendend end--第一次调用这里,10秒后调用上面的回调函数 local ok, e new_timer(start_delay, refresh) if not ok thenlog(ERR, failed to create timer: , e)return enddiversion01.lua核心代码 --如果init.lua中的全局变量global_configs[divEnable01]是false,就直接返回 if not global_configs[divEnable01] thenreturn end--如果init.lua中的全局变量global_configs[divEnable01]是true,就将backend 的值设置成tomcat_mytomcat01 --tomcat_mytomcat01 是最一开始在nginx的配置文件中调用的 ngx.var.backend tomcat_mytomcat01 diversion02.lua核心代码 --如果init.lua中的全局变量global_configs[divEnable02]是false,就直接返回 if not global_configs[divEnable02] thenreturn end--如果init.lua中的全局变量global_configs[divEnable02]是true,就将backend 的值设置成tomcat_mytomcat01 --tomcat_mytomcat01 是最一开始在nginx的配置文件中调用的 ngx.var.backend tomcat_mytomcat01 最后捋一遍: 首先在nginx中加载init.lua,初始化几个全局变量 再加载worker.lua,使用lua回调函数实现循环,实时读取redis中的key的值 根据redis中的值的变化来改变nginx最终负载指向的位置,从而实现实时的控制流量方向

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

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

相关文章

北京手机网站开发价格海外购物网站建设

下拉通知栏时发生了什么在某个APP中,发现下拉通知栏的时候,正在播放的视频会暂停,于是有点好奇这段操作是不是在生命周期中实现的。在网上众多关于Activity生命周期的讨论中,很多人认为onPause()和onStop()的区别就是“部分遮挡”…

做名片制作网站有什么新闻采编与制作专业简历

在我之前的文章 “Elasticsearch:如何提高查询性能” 及 “Elasticsearch:提升 Elasticsearch 性能” 里,我详细描述了如何提高搜索的性能。在今天的文章里,我从另外一个视角来描述如何调整搜索的速度。希望对大家有所帮助&#x…

上海网站开发制作网站降权

目标:了解字符集的概念,掌握MySQL数据库存储数据的字符集逻辑以及设置方式 字符集概念 MySQL字符集关系 解决乱码问题 字符集设置原理 1、字符集概念 目标:了解字符集概念,掌握字符集存储和读取的实现原理 概念 字符集:charset或者character set&am…

网站建设制作设计公司使用flash做网站

前言 之前初步体验了 React 的魅力, 又看文档理解了一下 useState 和 useEffect, 目前初步理解的概念是: useState 用来声明在组件中使用并且需要修改的变量 useEffect 用来对 useState 声明的变量进行初始化赋值 可能理解的不太准确, 不过大概差不多是这么个意思. 但是再往后…

深圳市罗湖区住房和建设局网站wordpress前台修改

动态资源分配,主要是spark在运行中可以相对合理的分配资源。 初始申请的资源远超实际需要,减少executor初始申请的资源比实际需要少很多,增多executorSpark运行多个job,这些job所需资源有的多有的少,动态调整executor…

建设网站找哪个公司厦门做商城网站

3.3 VREF/VREF-引脚 VREF和VREF-是STM32中用于提供参考电压的引脚。如下图: VREF引脚可以连接一个单独的外部参考电压,范围在2.0V~VDDA,但不能超过VDDA,否则就超过了模拟器件的最大供电电压。在100引脚的封装中&#…

河间市网站建设公司学装修设计

本篇文章聊聊 Stable Diffusion WebUI 中的核心组件,强壮的人脸图像面部画面修复模型 GFPGAN 相关的事情。 写在前面 本篇文章的主角是开源项目 TencentARC/GFPGAN,和上一篇文章《Stable Diffusion 硬核生存指南:WebUI 中的 CodeFormer》提…

网站 整体架构网址大全电脑版

今天,我们将看到有关此工具的信息,该工具使使用JPA Criteria更加容易。 使用该库的应用程序将在JPA实现中更加简洁,易于使用和可移植。 在本文的结尾,您将找到要下载的源代码。 什么是标准? 当前是创建动态查询的最佳…

莱特币做空国外网站佛山网络科技公司有哪些

CVE-2024-1430 是一个影响 Netgear R7000 路由器的安全漏洞,漏洞来源于该路由器 Web 管理界面的信息泄露问题。攻击者通过访问 /currentsetting.htm 文件,可能泄露敏感信息,如 Wi-Fi 密码等。 在测试和验证 CVE-2024-1430 时,您需…

制作网站的模板下载软件wordpress无法连接数据库

文档讲解:代码随想录 (programmercarl.com) 视频讲解:代码随想录的个人空间-代码随想录个人主页-哔哩哔哩视频 (bilibili.com) LeetCode 300.最长递增子序列 题目链接:300. 最长递增子序列 - 力扣(LeetCode) 解题代码…

创建网站投资多少钱北京网页设计电脑培训

晚上好,我是老杨。 Ping这几个字母,已经深入网工人的骨髓了吧? 把Ping用到工作里,肯定不少人在用,但对Ping的了解和理解是不是足够深,取决了你能在工作里用到什么程度,能让它帮你到什么地步。…

建设银行 福建 招聘网站沈阳 建设工程 招标中心网站

目录 前言 算法原理 姿态估计 2D姿态估计 3D姿态估计 3D形态估计 应用案例

手机网站模板使用方法怎么建设一个开源平台网站

在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据6条原则来开发程序,从而提高软件开发效率、节约软件开发成本和维护成本。 开闭原则 对扩展开放,对修改关闭。在程序需…

湛江h5建站wordpress 工作室主题

%d 十进制有符号整数 %u 十进制无符号整数 %f 浮点数 %s 字符串 %c 单个字符 %p 指针的值 %e 指数形式的浮点数 %x, %X 无符号以十六进制表示的整数 %0 无符号以八进制表示的整数 %g 自动选择合适的表示法 可以在”%”和字母之间加小写字母l, 表示输出的是长型数。 …

查建设标准网站优化网站除了百度站长

从政府工作报告探计算机行业发展 政府工作报告作为政府工作的全面总结和未来规划,不仅反映了国家整体的发展态势,也为各行各业提供了发展的指引和参考。随着信息技术的快速发展,计算机行业已经成为推动经济社会发展的重要引擎之一。因此&…

建设网站的功能定位是什么意思wordpress自动判断当前分类并获取tag标签

Redis | 集群模式 随着互联网应用规模的不断扩大,单一节点的数据库性能已经无法满足大规模应用的需求。为了提高数据库的性能和可扩展性,分布式数据库成为了解决方案之一。Redis 作为一个高性能的内存数据库,自然也有了自己的分布式部署方式…

浙江中立建设网站茶酒行业网站建设

很高兴告诉大家,我们StoneDB-8.0-V2.1.0企业版正式发布了!经过一个月的开发,我们的研发团队用极高的效率对2.0新架构版本查漏补缺,完善了最新架构的代码,并对性能、稳定性做出了优化,同时也修复了一些用户们…

如何 html5 网站常州房地产网站建设

近日,灵隐寺PPT汇报用上数据大屏疯狂刷屏,有做东南亚本土电商的老板发现这种数据大屏的模式可以很好地展现店铺运营状况。 所以就有老板来问:EasyBoss能不能也上线实时数据大屏的功能?没问题!立马安排! 要有…

15年做那些网站致富wordpress自动alt

avi文件格式详解 AVI是音频视频交错(Audio Video Interleaved)的英文缩写,它是Microsoft公司开发的一种符合RIFF文件规范的数字音频与视频文件格式,原先用于Microsoft Video for Windows (简称VFW)环境,现在已被Windows 95/98、OS/2等多数操…