精华内容
下载资源
问答
  • 2021-12-29 21:46:07

    线上应用稳定运行,系统无告警,业务无投诉,都是研发伙伴们所期望的。

    但最近生产环境出现一个问题,其中一个实例JVM内存爆满,频繁FullGC,从而导致出现MySQL获取不到连接,导致业务无法响应问题。

    临时解决方案:

    将这个有问题的实例从注册中心摘除,以免继续影响其他业务运行。


    第一步查看我们的健康检查系统,这个实例已经处于不健康的状态,所有请求都没响应。
    第二步查看Skywalking 链路追踪平台,几乎这个实例的调用全部超时失败。
    第三步查看运行日志,发现很多MySQL连接获取超时,服务调用失败等错误。
    如下所示:

    // 报错1
    2021-12-29 14:09:00.222 [http-nio-8030-exec-17] WARN  o.s.b.a.j.DataSourceHealthIndicator -DataSource health check failed
    org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLTransientConnectionException: HikariCP - Connection is not available, request timed out after 176706ms.
    	at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:82)
    	at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:324)
    	at org.springframework.boot.actuate.jdbc.DataSourceHealthIndicator.getProduct(DataSourceHealthIndicator.java:122)
    	at org.springframework.boot.actuate.jdbc.DataSourceHealthIndicator.doDataSourceHealthCheck(DataSourceHealthIndicator.java:105)
    	at org.springframework.boot.actuate.jdbc.DataSourceHealthIndicator.doHealthCheck(DataSourceHealthIndicator.java:100)
    	at org.springframework.boot.actuate.health.AbstractHealthIndicator.health(AbstractHealthIndicator.java:82)
    
    // 报错2
    org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: 
    ### Error querying database.  Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLTransientConnectionException: HikariCP - Connection is not available, request timed out after 112702ms.
    

    第四步同时查看JVM的运行参数,

    ps -ef|grep java
    

    输出:

    java -jar -Xloggc:/data/logs/micro-xxxx-service-gc-%t.log -XX:MetaspaceSize=256m -XX:NativeMemoryTracking=detail -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=100m -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCCause -Xmn512m -Xms1024m -Xmx1024m micro-xxxx-service.jar
    

    然后排查JVM GC情况,经查看GC日志发现几乎每秒都在进行FullGC,
    如下图所示:在这里插入图片描述


    经过跟业务和产品确认,我们的用户量和业务量最近没有产生过陡增,也就是一直正常跑的应用突然出现了问题。

    那根据FullGC频繁现象,首先怀疑是某个新功能导致内存不释放或直接进入Old区,导致内存一直不释放,最终频繁Full GC问题。

    经过排查出错日志点开始向前排查,发现有个全表查询SQL,这个SQL查的表日常数据百万,大致分析是由这个SQL引起的问题。根据SQL进行分析对应的功能,然后跟产品确认,确实这个功能是最近刚刚上线的新功能,然后马上组织产品和研发、测试伙伴确认修改方案,将全表查询改为带条件以及增加分页限制。


    个人总结:

    1. 首先,保留问题现场(运行时堆栈,运行日志),迅速解决影响;
    2. 监控平台,链路调用平台查看错误点;
    3. 运行日志快速分析出错点;
    4. JVM 堆栈、GC情况分析;
    5. 跟业务和产品确认是否有用户量或业务量陡增,以及确认是否存在新功能上线;
    6. 结合运行日志异常和JVM堆栈以及GC情况具体分析;
    7. 找到问题点,快速修复验证,发布。

    传送门:
    生产稳定:JVM调优- java进程,JVM频繁GC,导致CPU占用、内存占用过高过高定位和排查
    生产稳定:JVM-MySQL-Tomcat-服务调用,调优相关
    生产稳定:SpringBoot-Admin 微服务监控+健康检查+钉钉告警,附代码配置
    -------------欢迎各位留言交流,如有不正确的地方,请予以指正。【Q:981233589】

    更多相关内容
  • 在能源企业信息化高度发展的背景下,北京智和信通有限公司推出全栈式运维管控平台——“智和网管平台”,助力能源企业搭建高可靠、真稳定的IT运维平台,实现高效稳定生产。 信息化飞速发展,能源企业面临巨大运维...

    在能源企业信息化高度发展的背景下,北京智和信通有限公司推出全栈式运维管控平台——“智和网管平台”,助力能源企业搭建高可靠、真稳定的IT运维平台,实现高效稳定生产。

    信息化飞速发展,能源企业面临巨大运维难题

    近年来随着信息技术不断发展和能源行业信息化程度不断提升,各类业务系统在能源企业中普及,能源企业对网络的依赖不断增强。在此情景下,能源企业逐渐形成了集团公司网络、地区公司网络、生产地域网络三层网络架构,网络规模越来越大,网络结构越来越复杂,运维难度不断增加。面对庞大复杂的网络基础框架,IT运维工作量越来越大,在运维工作推进过程中,逐步暴露出更多共性问题。

    1. 机构、部门众多,地理位置分散,难以形成统一管理;
    2. 海量设备,如大量的网络设备、服务器等,且设备管理分散;
    3. 人工管控设备,多人公用设备账号密码,安全性难保障;
    4. 运维过程难以产生有效记录,权责不明晰;
    5. 运维缺乏主动性,多为问题发生后的修复,并不能防止业务系统的破坏;
    6. 运维管理人员的工作量多、强度大。

    智和信通一体化运维方案,助力能源企业高效生产

    北京智和信通一体化运维方案,将能源企业下辖的管理公司、销售公司、生产单位、研究机构等各部门,跨地域、跨网络的管理起来,实现统一的网络运维管理和资源整合,助力能源企业信息化系统稳定运行,安全生产、正常运转。

    • 集中管理,由繁化简

    北京智和信通技术有限公司深入实际场景,通过核心产品-“智和网管平台SugarNMS”搭建安全可控的全栈式能源企业网络运维解决方案,在功能上形成了对网络设备、工业设备、安全设备、业务设备、视频设备、基础应用等多种监控、运维;在范围上形成了跨地域、跨网络整合管理模式。

     

    • 全网可视化拓扑,声光实时展现设备状态

    在拓扑中以不同颜色设备图标实时展现设备的实时状态信息。通过拓扑图对设备、设备资源、链路进行管理。通过图形化、具象化的拓扑形式展现设备间的联动关系与实时状态信息。

     能源企业网络拓扑示意图

    • 故障实时定位,极速解决

    支持多种告警机制,自定义配置告警阀值,支持快速标示已经执行操作的告警,迅速定位告警设备。

     

    • 大屏展示,运维数据一览无余

    提供可视化数据分析能力,对网络海量数据进行图形化分析展示。通过直观的图表和图形化手段清晰有效的将运维数据分析结果进行传达,帮助用户由宏观到微观更快地了解网络运维现状,做出更具时效性的决策。

    能源企业网络数据展示大屏示意图

    • 自动化智能巡检

    传统人工巡检耗时长,难深入,给运维部门带来极大工作压力,智和网管平台支持自定义巡检策略,对设备的运行情况进行统计和报表生成,并可自定义预设时间向指定邮箱发送巡检结果报表,实现对网络设备的定期检查,把握网络运行中的易出现问题的环节,做到预防为先。

     

    • “端到端”业务管理

    智能化、自动化的业务监管方案,支持可量化、可视化的技术手段,全面监控IT业务系统服务的响应性能,帮助用户准确感知整体业务的性能和质量状况。支持对关键业务设定性能指标告警阈值、预警风险异常,告警消息即时送达。

     

    • 智能运维编排和安全管控

    深入设备、资源层面的网络安全运维与深度管控,基于设备协议进行统一安管、运维规范配置,实现多品牌设备集中管控、运维编排、安全策略可见、配置准确性核查等功能。

     

    • 自定义扩展设备类型及其资源

    设备扩展能力允许用户自定义设备面板图,最大可能的支持对不同设备类型的支持。通过自定义设备类型及其设备资源,最大限度上提高了智和网管平台的管理范围,真正实现了对设备及其资源的全面化管理,达到管控万物的目标。

     

    • 运维与资产整合全面管理

    将资产实物与运维数据库一一对应,为用户提供更加便捷高效的资产生命周期管理,资产跟踪、维护和统计分析。从资产入库、领用、变更、维修、调拨、到报废处置,资产每一步操作均实现完整记录,支持追溯,通过平台实现资产整个生命周期的全流程闭环管理。

     

    • 标准化运维流程有迹可循

    提供运维工单功能,支持于设备和故障管理页面快速创建工单,把控故障处理进度。通过工单平台简化故障处理流程,形成自动化故障处理机制,并在每个处理流程的节点上责任到人,在实现快速响应故障的同时,兼顾企业流程管控。

     

    • 异构数据智能分析

    网络、设备、资源、故障、告警、性能、日志、资产等数据全面汇总,通过曲线图、柱状图或表格等形象化的展示出来,按天、星期、月查看性能指标变化。

     

    • 全面国产化环境支持

    智和信通采用JAVA和HTML5语言开发进行智和网管平台开发,平台具有优秀的可移植性,支持部署在国产操作系统上运行,如采用华为、华三、浪潮等服务器,安装中标麒麟操作系统作为网管运行环境。同时支持使用金仓、达梦等国产数据库进行数据存储,使用东方通等国产中间件提供对外服务。并且可以对国产化CPU、服务器、数据库、中间件等软硬件进行全面监控。

     

    通过部署智和信通统一运维方案,实现自动化高效的管理网络,为能源企业节省60%以上的人工操作和重复操作,对能源企业众多类型海量设备快捷、智能地统一管理、控制。

     

    展开全文
  • 稳定性(Reliability)、可用性(Availability)、可维护性(Maintainability),是三个有关联的概念、合称RAM,较为容易混淆,因此本需要特别说明一下。依据《ISO IEC 25010-2011 SQuaRE》标准,可将稳定性理解为”...

    1、领域名词解释

    稳定性(Reliability)、可用性(Availability)、可维护性(Maintainability),是三个有关联的概念、合称RAM,较为容易混淆,因此本需要特别说明一下。依据《ISO IEC 25010-2011 SQuaRE》标准,可将稳定性理解为”应对故障(faults)的能力、对用户而言是可用的,被性能、可用性、可维护性等因素影响。“ 稳定性并不纯粹、搞混淆RAM是很正常的,但治理故障这一点很清淅。

    本文对高可用的定义是:能应对大流量的稳定性。因此实施方案当中也涉及SLA等指标的运营。

     

    2、稳定性治理的三种思想

    什么是交易长期坚持的高可用方向?故障涉及方方面面,高可用的方法也是种类繁多,我们需要几条基本方法去指导高可用长期的治理方向,我们有三种视角去看待高可用这件事:可用性计算公式、复杂系统理论、交易技术事故定级规范。从不同的视角看待事情,会导致不同的分析路径。

     

    1.可用性计算公式—亚马逊

    第一种理解可以从可用性计算公式(Availability Estimate)入手,涉及两个变量:故障概率、故障时长,增大MTBF、减小MTTR。主要包含减少故障发生概率、减少故障恢复时间、制造故障发生概率(可控的)三个方法。为什么会需要人为制造故障发生概率?因为故障发生相应频次较低,没有办法很好地提前发现故障,而制造故障本质则能帮助解决。减少故障发生概率是know unnkown的做事, 制造故障发生概率是unkown unkown的做事。

    AvailabilityEstimate=MTBF/(MTBF+MTTR)。MTBF:theMeanTimeBetweenFailure,MTTR:MeanTimetoRecover

    从这三个策略推导的一些主要方法如下图示,参考了亚马逊《AWS Reliability Pillar 2019》。

    可用性公式拆解的稳定性原则(灰色部分源自《AWS Reliability Pillar 2019》)

     

    2.复杂系统理论—Netflix

    分布式系统具备复杂系统的一般特征,可以复杂系统理论来研究与指导分布式系统,该想法来自Netflix《Mastering Chaos—A Netflix Guide to Microservices》的启发。Netflix在业内有一系列产生重大影响的稳定性开源产品,包含Hystrix、Chaos Monkey、Zuul、aws-autoscaling等。

    依据《What is a Complex System(James Ladyman etc.)》论文对复杂系统定义的研究,复杂系统的特征之一是系统主要维护 “无序性(disorder) vs. 鲁棒性(robust order)”这对矛盾的平衡稳定。当系统突破临界值、就会产生更大的disorder。从这对矛盾出发、有两个思路:既可以通过模拟环境增加无序性、激化矛盾,也可以增加稳定性能力鲁棒性、减少矛盾。

    复杂理论的原则可概括为:随机、依赖和规模是影响系统稳定性的三大因素,分治、自治、反馈是守正之法,无序是出奇之法。从该原则推导的主要方法如下图所示。

    复杂系统理论拆解的稳定性方法(灰色部分源自《Mastering Chaos—A Netflix Guide to Microservices》)

     

    3.交易技术事故障驱动—蚂蚁金服

    影响事故定级的因素主要是两大类:资金损失、体验损失。

    从避免资金损失、体验损失这两个策略归纳的一些主要方法,如下图所示。鉴于蚂蚁金服在金融领域的行业影响力,主要参考了蚂蚁金服TRaaS技术风险防控平台、将高可用与资金安全相结合。资金安全也是影响系统稳定性的一个重要因素。

    交易事故拆解的稳定性方法(灰色部分源自《蚂蚁金服 TRaaS 技术风险防控平台》)

     

    3、稳定性的方法设计

    3.1、设计挑战

    什么构成了交易可用性的挑战?归纳成四点:故障的随机性(软硬件、网络故障等),系统规模(交易链路长、外部依赖关系多),系统变化(节假日流量、功能迭代发布),以及交易故障产生的重大影响。前三点是引发系统故障的重要因素,如下图所示。

    影响稳定性的三个因素(依据复杂系统理论)

    这三个因素也决定了稳定性需要长期运营、没办法一劳永逸(更本质的说法是系统的熵增所决定)。这意味着像Amazon、阿里等这样的大公司,即使有了专业的SRE团队、稳定的技术产品体系,体系化地做稳定性这件事,也无法说 "it's enough!" 只要有业务需求迭代、只要有变化、只要系统存在,就需长期去做运营。

     

    3.2、系统全景图

    交易可用性方向如下图,主要思路如下:

    1)用分治与隔离的思路、将复杂系统变成N个相对简单的子系统,简化系统的规模、降低模块间的依赖关系、降低长链条比例。这点在系统架构阶段要重点关注。

    2)每个子系统,需要具备健康反馈能力、能够时实感知故障,并且实现对故障的自愈,以应对故障的随机性。

    3)为了减轻故障频次低难以验证稳定性的问题,也为了防止系统处于临界状态(一个小问题,引发大故障),需要随时的随机的在生产环境做故障演习,以及压测。对于故障演习,以前大家不够重视,这是一个很强的演进驱动力,在系统越早期做、成本及风险越低。

    4)不同故障对业务的影响不一样,我们可以通过柔性可用等方式减少影响、保障用户核心体验。针对交易业务重点关注全域的资金链条。

    5)我们不仅需要构建系统的稳定性能力,同时也要把控好整个研发流程,包括成本收益、架构设计、持续交付、组织保障、故障处理机制等。有一个源自阿里运维的数据,有60%~80%的故障源自发布变更。

     

    4、稳定性子项交付成熟度—衡量标准。

    对交易高可用结果的定量,以各团队对技术故障数量为考核标准。对交易高可用建设过程的定量,主要涉及两方面:具体要做什么事、这些事又怎么定量。本文参考阿里运维参考汽车自动化的分类方法,从功能完善度、自动化程度两个维度定义了交易高可用成熟度等级,见下表。本文的自适应容量、自适应故障参考自《企业级 AIOps 实施建议》,混沌工程参考自《AWS混沌工程成熟度分级标准》,监控告警参考自《stack state监控成熟度模型》。

    2019年Q3Q4主要实现绿色表示的目标,2020年实现全覆盖。

    分类

    工作内容

    L0(无自动驾驶)

    L1(具有特定功能的自动驾驶)

    L2(具有复合功能的自动驾驶)

    L3(具有限制条件的无人驾驶)

    L4(全工况无人驾驶)

    健康反馈

    监控告警

    全人工

    独立组件监控

    分层监控

    全链路监控

    智能分析、预测、自愈

    分治单元

    业务隔离

    无隔离

    独立组件隔离

    基础设施隔离(网络、机房、容器、组件、数据库等)。含:Set化、泳道等。

    业务隔离

    环境隔离

    单元自愈

    自适应容量

    数据收集和分析工具

    流量调度平台、扩缩容平台。

    含:限流、扩缩容等。

    基于规则的自动调度和扩缩容

    可自主规划成本和容量方案的智能调度&伸缩

    支持服务完整生命周期的全部基础运维工作,由智能系统接管,统自主做到可用性、成本、效率撮优化

     

    自适应故障

    按需开发的追查、处理脚本

    预案平台

    基于预案的自动止损;自适应可测;

    例:依赖关系、核心链路等。

    可自动规划止损方案的智能故障ONCALL;自适应可测;

    支持服务完整生命周期的全部基础运维工作,由智能系统接管,统自主做到可用性、成本、效率撮优化

    攻防演练

    全链路压测

    全人工

    单机压测

    交易全链路压测

    交易全链路压测;自动生成报告;周期自动执行

    交易全链路压测;自动生成报告;周期自动执行;智能设置阈值

     

    混沌工程

    全人工

    在预生产环境中运行实验;有工具

    生产环境运行;周期人工;手动监控和停止实验;若干故障场景(应用容器)

    生产环境运行;周期人工;自动分析;自动终止实验;丰富故障场景(应用容器/网络环境/数据库等)

    生产环境运行;周期自动化;丰富故障场景

    研发工程

    发布变更

     

     

     

     

     

     


    =>更多文章请参考《中国互联网业务研发体系架构指南》

    =>更多行业权威架构案例及领域标准、技术趋势请关注微信公众号:

     

    公众号:关注更多实时动态
    更多权威内容关注公众号:软件真理与光
    展开全文
  • django生产环境部署

    万次阅读 2020-05-18 18:05:35
    django生产环境部署 生产环境中的数据流 参考文档: wsgi详解:https://blog.csdn.net/li_101357/article/details/52748323 wsgi协议介绍(萌新版):https://blog.csdn.net/j163you/article/details/80919360 廖...

    django生产环境部署

    生产环境中的数据流

    参考文档:

    wsgi详解:https://blog.csdn.net/li_101357/article/details/52748323

    wsgi协议介绍(萌新版):https://blog.csdn.net/j163you/article/details/80919360

    廖雪峰web编程讲解:https://www.liaoxuefeng.com/wiki/897692888725344/923057027806560

    WSGI是什么?

    1. WSGI是一种规范,它定义了使用python编写的web app(django)与web server(uWSGI)之间接口格式,实现web app与web server间的解耦。

    2. WSGI 没有官方的实现, 因为WSGI更像一个协议. 只要遵照这些协议,WSGI应用(Application)都可以在任何服务器(Server)上运行

    3. WSGI实质:WSGI是一种描述web服务器(如nginx,uWSGI等服务器)如何与web应用程序(如用Django、Flask框架写的程序)通信的规范、协议。

    为什么需要web协议:

    1)不同的框架有不同的开发方式,但是无论如何,开发出的应用程序都要和服务器程序配合,才能为用户提供服务。

    2) 这样,服务器程序就需要为不同的框架提供不同的支持,只有支持它的服务器才能被开发出的应用使用,显然这是不可行的。

    3)**web协议本质:**就是定义了Web服务器和Web应用程序或框架之间的一种简单而通用的接口规范。

    Web协议介绍

    Web协议出现顺序: CGI -> FCGI -> WSGI -> uwsgi

    1. CGI: 最早的协议

    2. FCGI: 比CGI快

    3. WSGI: Python专用的协议
     4. uwsgi: 比FCGI和WSGI都快,是uWSGI项目自有的协议,主要特征是采用二进制来存储数据,
    议都是使用字符串,所以在存储空间和解析速度上,都优于字符串型协议.

    uwsgi是什么?

    1. 它是一个二进制协议,可以携带任何类型的数据。
    2. 一个uwsgi分组的头4个字节描述了这个分组包含的数据类型。
    3. uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信;

    uWSGI是什么?(web服务器 和nginx类似

    1. 什么是uWSGI: uWSGI是一个全功能的HTTP服务器,实现了WSGI协议、uwsgi协议、http协议等。

    2. **uWSGI****作用:**它要做的就是把HTTP协议转化成语言支持的网络协议,比如把HTTP协议转化成WSGI协议,让Python可以直接使用。

    3. uWSGI特点:轻量级,易部署,性能比nginx差很多

    注:

    如果架构是Nginx+uWSGI+APP,uWSGI是一个中间件
      如果架构是uWSGI+APP,uWSGI是一个服务器

    WSGI / uwsgi / uWSGI 这三个概念的区分。

    • WSGI是一种通信协议。通常用户django框架和uWSGI服务器之间通信。(如果说的更细致的话就是用来和Python WSGI model)
    • uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信。
    • 而uWSGI是实现了uwsgi和WSGI等协议的Web服务器

    nginx是什么?

    1. Nginx是一个Web服务器,其中的HTTP服务器功能和uWSGI功能很类似
     2. 但是Nginx还可以用作更多用途,比如最常用的反向代理、负载均衡、拦截攻击等,而且性能极高

    django是什么?

    1. Django是一个Web框架,框架的作用在于处理request和 reponse,其他的不是框架所关心的内容。

    2. 所以如何部署Django不是Django所需要关心的。

    请求处理整体流程

    • nginx接收到浏览器发送过来的http请求,将包进行解析,分析url
    • **静态文件请求:**就直接访问用户给nginx配置的静态文件目录,直接返回用户请求的静态文件
    • **动态接口请求:**那么nginx就将请求转发给uWSGI,最后到达django处理

    各模块作用

    1. **nginx:**是对外的服务器,外部浏览器通过url访问nginx,nginx主要处理静态请求

    2. **uWSGI:**是对内的服务器,主要用来处理动态请求

    3. **uwsgi:**是一种web协议,接收到请求之后将包进行处理,处理成wsgi可以接受的格式,并发给wsgi

    4. **WSGI:**是python专用的web协议,根据请求调用应用程序(django)的某个文件,某个文件的某个函数

    5. **django:**是真正干活的,查询数据等资源,把处理的结果再次返回给WSGI, WSGI 将返回值进行打包,打包成uwsgi能够接收的格式

    6. uwsgi接收wsgi发送的请求,并转发给nginx,nginx最终将返回值返回给浏览器

    Django + uWSGI方案

    1. 没有nginx而只有uwsgi的服务器,则是Internet请求直接由uwsgi处理,并反馈到web项目中。

    2. nginx可以实现安全过滤,防DDOS等保护安全的操作,并且如果配置了多台服务器,nginx可以保证服务器的负载相对均衡。

    3. 而uwWSGI则是一个web服务器,实现了WSGI协议(Web Server Gateway Interface),http协议等,它可以接收和处理请求,发出响应等。所以只用uwsgi也是可以的。

    nginx和uWSGI特点

    1)nginx的作用

    1.反向代理,可以拦截一些web攻击,保护后端的web服务器

    2.负载均衡,根据轮询算法,分配请求到多节点web服务器

    3.缓存静态资源,加快访问速度,释放web服务器的内存占用,专项专用

    2)uWSGI的适用

    1.单节点服务器的简易部署

    2.轻量级,好部署

    Django + uWSGI+ Nginx 的生产环境部署

    django上线 settings.py 更改配置
    在这里插入图片描述
    1、在centos 7中安装python3环境

    # 1、yum更新yum源
    yum update
    # 2、安装Python 3.7所需的依赖否则安装后没有pip3包
    yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel libffi-devel gcc make
    # 3、在官网下载所需版本,这里用的是3.7.0版本
    wget https://www.python.org/ftp/3.7.0/Python-3.7.0.tgz
    
    # 1、yum更新yum源
    yum update
    # 2、安装Python 3.7所需的依赖否则安装后没有pip3包
    yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel libffi-devel gcc make
    # 3、在官网下载所需版本,这里用的是3.7.0版本
    wget https://www.python.org/ftp/3.7.0/Python-3.7.0.tgz
      2、安装Python
    
    # 1、解压
    tar -xvf Python-3.7.0.tgz
    
    #2、配置编译
    cd Python-3.7.0
    ./configure --prefix=/usr/local/python3  # 配置编译的的路径(这里--prefix是指定编译安装的文件夹)
    ./configure --enable-optimizations  # 执行该代码后,会编译安装到 /usr/local/bin/ 下,且不用添加软连接或环境变量
    make && make install
    ln -s /usr/local/python3/bin/python3 /usr/bin/python3  # 添加软连接
    ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
    
    #3、将/usr/local/python3/bin加入PATH
    [root@linux-node1 testProj]# vim /etc/profile
    #然后在文件末尾添加
    export PATH=$PATH:/usr/local/python3/bin
    
    [root@linux-node1 testProj]# source /etc/profile # 修改完后,还需要让这个环境变量在配置信息中生效,执行命令
    

    2、初始化一个django项目

    [root@linux-node1 /]# pip3 install django==2.0.4
    [root@linux-node1 /]# mkdir /code/
    [root@linux-node1 /]# cd /code/
    [root@linux-node1 testProj]# django-admin startproject mmcsite
    [root@linux-node1 testProj]# cd /code/mmcsite
    [root@linux-node1 testProj]# python3 manage.py runserver 0.0.0.0:8000
    # 页面中访问:http://192.168.56.11:8000/
    

    3、安装uWSGI 并使用uWSGI启动这个服务

    '''1. 安装uwsgi'''
    [root@linux-node1 /]# pip3 install uwsgi
    [root@linux-node1 /]# ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi
    
    '''2. 配置uwsgi.ini启动文件'''
    [root@linux-node1 /]# vim uwsgi.ini
    [uwsgi]
    socket = 0.0.0.0:3031
    chdir = /code/mmcsite
    wsgi-file = /code/mmcsite/wsgi.py
    processes = 5
    threads = 30
    master = true
    daemonize = /code/mmcsite/uwsgi.log
    module=mmcsite.wsgi
    pidfile = /code/mmcsite/uwsgi.pid
    chmod-socket=666
    enable-threads = true
    
    '''3. 使用uwsgi启动django:一定要在这个项目目录中'''
    [root@linux-node1 /]# uwsgi --http 192.168.56.11:80 --file mmcsite/wsgi.py --static-map=/static=static
    访问项目:http://192.168.56.11
    

    配置uWSGI文件

    [root@linux-node2 demo2]# vim /code/mmcsite/uwsgi.ini  # uwsgi.ini文件
    [uwsgi]
    socket = 0.0.0.0:3031                  # 指定socket监听的地址和端口
    chdir = /code/mmcsite                  # 项目路径 
    wsgi-file = /code/mmcsite/wsgi.py      # django的wsgi文件路径
    processes = 5                          # 启动五个进程
    threads = 30                           # 每个进程启动30个线程
    master = true
    daemonize = /code/mmcsite/uwsgi.log    # 日志存放路径
    module=mmcsite.wsgi                    # 使用mmcsite.wsgi模块
    pidfile = /code/mmcsite/uwsgi.pid      # uwsgi启动进程id存放路径
    chmod-socket=666                       # socket权限
    enable-threads = true                  # 允许用内嵌的语言启动线程,这将允许你在app程序中产生一个子线程
    

    使用uwsgi启动django,注意:需要在Django项目中启动

    uwsgi --http 0.0.0.0:端口号(自己填) --file 项目名/wsgi.py --static-map=/static=static
    

    访问项目 如:http://192.168.56.11

    如果成功,便可以配置nginx了

    4、安装配置nginx

    安装nginx

    '''1. 配置nginx YUM源'''
    [root@linux-node1 /] vim /etc/yum.repos.d/nginx.repo
    ```
    [nginx]
    name=nginx repo
    # 下面这行centos根据你自己的操作系统修改比如:OS/rehel
    # 6是你Linux系统的版本,可以通过URL查看路径是否正确
    baseurl=http://nginx.org/packages/centos/7/$basearch/
    gpgcheck=0
    enabled=1
    ```
    '''2. 安装nginx'''
    [root@linux-node1 /] yum -y install nginx
    

    配置nginx

    [root@linux-node1 /]# vim /etc/nginx/conf.d/django.conf 
    server {
        listen       8888;
        server_name  192.168.56.11;
        client_max_body_size 5M;
        gzip on;
        gzip_buffers 32 4K;#压缩在内存中缓冲32块 每块4K
        gzip_comp_level 6 ;#压缩级别 推荐6
        gzip_min_length 4000;#开始压缩的最小长度4bit
            gzip_types text/plain application/json application/javascript application/x-javascript application/css application/xml application/xml+rss text/javascript application/x-httpd-php image/jpeg image/gif image/png image/x-ms-bmp;
            location / {
                  include uwsgi_params;
                  uwsgi_pass 127.0.0.1:3031;
                  uwsgi_ignore_client_abort on;
            }
    
            error_page 404 /404.html;
                location = /40x.html {
            }
    
            error_page 500 502 503 504 /50x.html;
                location = /50x.html {
            }
    
    }
    

    5、启动项目

    [root@linux-node1 demo2]# systemctl restart nginx   # 开启nginx
    [root@linux-node1 demo2]# uwsgi --ini uwsgi.ini     # 启动uwsgi的django项目
    # http://192.168.56.11:8888/ 访问项目
    [root@linux-node1 demo2]# uwsgi --stop uwsgi.pid    # 关闭uwsgi
    

    channels+django+nginx+daphne部署websocket项目

    ​ 当你的django项目中使用channels增加了websocket功能的时候,在使用runserver命令启动时,既可以访问http请求,又可以访问websocket请求。但是当你使用uWSGI+nginx的来启动项目的时候,你会发现http请求可用,但是websocket请求永远是404的错误。这是为什么呢?

    ​ 因为在我们的标准生产环境部署中,使用的事WSGI协议来启动的我们的项目,也就是使用的wsgi.py这个文件来对接的uWSGI服务器。但是我们channels使用的ASGI协议,在我们使用uWSGI来启动项目的时候,关于ASGI的一些配置他就找不到了。这就导致了你所有的websocket请求都是404。在查阅了大量的资料和阅读了官方文档以后终于解决了这个问题。

    这个问题的解决有两种方案:
    • 启用uWSGI来处理所有的http请求,另外开启一个daphne服务来处理websocket请求。这样的好处是按照请求类型分流,两种请求方式互不干扰。
    • 另外一种则是启用daphne服务来处理http和websocket这两种请求。在daphne服务内部他会根据请求类型的不同分开处理。让你既可以访问websocket又可以访问http。

    安装Daphne

    pip install daphne

    在setting.py同级的目录下新建一个asgi.py文件

    #asgi.py
    
    """
    ASGI entrypoint. Configures Django and then runs the application
    defined in the ASGI_APPLICATION setting.
    """
    
    import os
    import django
    from channels.routing import get_default_application
    
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")
    django.setup()
    application = get_default_application()
    
    使用Daphne来启动项目

    daphne -b 0.0.0.0 -p 8001 myproject.asgi:application

    这种方式只是在后台启动了你的项目,我们为了保证项目的稳定性,保证项目在意外死亡以后可以迅速的重启,我们来使用supervisor来管理我们的daphne服务。

    什么是supervisor

    1. Supervisor是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统。

    2. 作用:它可以很方便的监听、启动、停止、重启一个或多个进程。

    3. 用Supervisor管理的进程,当一个进程意外被杀死,supervisort监听到进程死后,会自动将它重新拉起

    4. 很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制。

    5. 说白了,它真正有用的功能是俩个将非daemon(守护进程)程序变成deamon方式运行对程序进行监控,当程序退出时,可以自动拉起程序。

    6. 但是它无法控制本身就是daemon的服务。

    安装supervisor

    yum install epel-release

    yum install supervisor

    不要使用pip下载supervisor,因为系统有python2.7和python3.6两个版本,有时候会因为版本问题倒是supervisor启动错误。而且pip的supervisor的安装和使用方式也更为繁琐一些。

    使用supervisor

    在/etc/supervisord.d/文件夹下面配置被管理的服务的配置,然后启动supervisor即可管理该服务。

    下面使用supervisor来管理我们dephne服务

    #shiyanlou.ini
    
    [program:asgi]
    directory=/code/shiyanloupro/
    command=daphne -b 0.0.0.0 -p 8000 --proxy-headers shiyanloupro.asgi:application
    autostart=true
    autorestart=true
    stdout_logfile=/tmp/websocket.log  #日志
    redirect_stderr=true
    

    supervisore的管理命令

    [root@linux-node1 tmp]# supervisord -c /etc/supervisord.conf  # 启动supervisor
    [root@linux-node1 tmp]# systemctl enable supervisord    # 开机自启动
    [root@linux-node1 tmp]# systemctl start supervisord     # 启动supervisord服务
    [root@linux-node1 tmp]# supervisorctl reread				    # 重新读取多有的配置文件
    [root@linux-node1 tmp]# supervisorctl update            # 配置文件修改后使用该命令加载新的配置,常和reread连用
    [root@linux-node1 tmp]# supervisorctl reload            # 重新启动配置中的所有程序
    
    [root@linux-node1 tmp]# supervisorctl status            # 查看supervisor管理的所有进程状态
    [root@linux-node1 supervisord.d]# supervisorctl restart test            # 启动test程序
    [root@linux-node1 supervisord.d]# supervisorctl stop all                # 停止所有程序
    [root@linux-node1 supervisord.d]# supervisorctl stop es       # 停止名称es程序(如果停止所有换成all)
    [root@linux-node1 tmp]# supervisorctl start es      # 启动项目名称es程序
    
    

    接下来就是配置nginx将请求转发发哦daphne服务器

    upstream channels-backend {
        server localhost:8000;
    }
    ...
    server {
        ...
        location / {
            try_files $uri @proxy_to_app;
        }
        ...
        location @proxy_to_app {
            proxy_pass http://channels-backend;
    
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
    
            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Host $server_name;
        }
        ...
    }
    

    接下来开启你的nginx服务和dephne服务即可。

    systemctl restart nginx   #重启nginx
    supervisorctl reread			#重新读取supervisor的配置
    supervisorctl update			#更新supervisor的配置
    supervisorctl start asgi	#启动asgi服务,也就是我们的daphne服务
    
    展开全文
  • 晃电是电网电压暂降的一种表现,通常晃电时系统电压突降到额定电压的0.1~0.9倍,经过短时间(10ms~1min)后电压又恢复到正常数值。其产生的原因有雷击、短路和大负荷起动等情况。 1.1抗晃电与自启动的区别 1)...
  • 安全生产模拟考试一点通:煤炭生产经营单位(安全生产管理人员)复审考试根据新煤炭生产经营单位(安全生产管理人员)考试大纲要求,安全生产模拟考试一点通将煤炭生产经营单位(安全生产管理人员)模拟考试试题进行...
  • 点击蓝字关注我们软件开发环境(Software Development Environment,SDE)是指在基本硬件和宿主软件的基础上,为支持系统软件和应用软件的工程化开发和维护而使用的一组软件,...项目部署环境一般可分为三种:生产环...
  • 题库来源:安全生产模拟考试一点通公众号小程序 2022危险化学品生产单位安全生产管理人员判断题为危险化学品生产单位安全生产管理人员练习题历年真题!2022年危险化学品生产单位安全生产管理人员理论题库及答案依据...
  • 有一个终端产品,故障现象是不通信,测试总线电流,发现电流相当小,基本上是在几个微安级电流,但测试电压确是正常的为稳定的3.3V,通过测试和分析发现是稳压管损坏,但是稳压管损坏了为什么LDO还能输出稳定的3.3V...
  • 这类计算方式我们最常见,毕竟你的系统在一段时间里不出现故障,就说明它很稳定嘛!不 过,在真实的使用场景中,怎么样才算是可用时长,什么情况下又是不可用时长,这个是怎 么定义的呢? 时间维度:Availability = ...
  • 如何快速排查生产问题

    万次阅读 2021-07-30 09:10:18
    如何快速排查生产问题 大家都遇到过哪些生产问题呢 ...1 查看监控,直接内存使用情况是否稳定; 2 查看日志,是否有直接内存相关的报错; 3 本地调试,关闭池化内存、添加内存泄漏检测、模拟大量请
  • 在流作业的生产环境中,作为应用最广泛的消息中间件,kafka集群的稳定性对业务的平稳起到重要作用。然而如何判断一个kafka集群的稳定性是一个运维人员的重要技能。 笔者结合经验总结了如下查看一个kafka不稳定状态下...
  • 阿里巴巴稳定性保障体系

    千次阅读 2021-01-24 18:27:41
    阿里巴巴稳定性保障体系 作者介绍 步崖,曾就职于阿里巴巴和蚂蚁金服。熟悉高并发、高可用架构,稳定性保障等。热衷于技术研究和分享,发表过”分布式事务”、”分布式缓存”等多篇文章被广泛阅读和转载 ...
  • 题目:在( )生产类型中,单一产品的生产永不停止,机器设备一直运转。 题目:以下条件要求厂址应该接近消费市场的是( ) 题目:如果在生产成本中运输费用占很大比重,则常采用( )来选择厂址。 题目:下列运输...
  • 网络链路不稳定的排查问题方法

    千次阅读 2019-12-12 21:25:30
    越大说明相应节点越不稳定。   工具二:traceroute命令 traceroute也是几乎所有Linux发行版本预装的网络测试工具,用于跟踪Internet协议(IP)数据包传送到目标地址时经过的路径。traceroute先发送小的具有...
  • 例如,从运行环境中收集统计数据以分析其正常行为。为此,您可以使用当前环境监控仪表板或创建专用仪表板。这将帮助您为测试阶段做准备,并通过比较当前和新部署统计数据来验证成功的测试操作。可能的指标可以是低...
  • 解析软件系统稳定性的三大秘密

    千次阅读 2020-07-15 09:56:48
    随着软件复杂性越来越高,稳定性的保障越来越难,随着服务规模越来越大,稳定性的重要性越来越高。工程师在设计和开发软件的时候,要坚持底板思维。
  • 【精益生产】精益生产十大工具

    万次阅读 2018-02-05 00:00:00
    精益生产(Lean Production),简称“精益”,是衍生自丰田生产方式的一种管理哲学。1准时化生产(JIT)准时生产方式是起源于日本丰田汽车公司,其基本思想是“只在需要的时候,按需要的量生产所需的产品”。这种...
  • 在控制层,我们可以提供先进、成熟的控制系统,提供操作员仿真培训系统和先进控制解决方案,帮助用户实现安全、稳定生产,提高生产效益;培训熟练的操作人员,进行工艺优化;提供先进控制技术,解决复杂控制问题。...
  • 浅谈系统实现层面稳定性保障

    千次阅读 2021-02-23 16:20:00
    但具体业务系统实现距离拖拽式批量生产尚需时日,最终产出实现方案差异可能很大,所以所有稳定性工作的核心还是围绕系统与代码本身来开展,如下图所示,无论是质量团队、各方管控平台,还是研发流程保障机制,最终的...
  • 淘宝客户端安全生产体系建设

    千次阅读 2021-11-26 12:03:01
    从研发、构建、发布、应急四个阶段,看淘宝客户端是如何来建设自身的安全生产体系。
  • java多线程-生产者消费者

    千次阅读 2017-11-09 22:49:38
    前言对于java开者而言,多线程开发是不可避免的,多线程程序相对于单线程程序稳定性更强,一个线程挂了不会影响整个程序的正常运行。在多cup的机器上,多线程更加具有效率上的优势。但是多线程也会导致一些问题,...
  • PP面向订单生产模式探讨

    千次阅读 2018-02-12 16:57:48
    面向订单生产MTO(Make-to-Order)即面向订单生产。在面向订单生产的方式中,产品的设计工作已经完成,而生产用的物料尚未订购。在此环境中销售量通常较小,而客户则必须等待进货和生产所需的时间。全部交货提前期...
  • 背景:笔者之前一直从事嵌入式音视频相关的开发工作,对于音视频的数据的处理,生产者消费者队列必不可少,而如何实现一个高效稳定生产者消费者队列则十分重要,不过按照笔者从业的经验,所看到的现象,不容乐观,...
  • 我们需要在生产环节去模拟双 11,如何去做到模拟的用户请求不对正常的业务和数据造成影响。 为了能够发出每秒 1000w 以上的用户请求,全链路压测构件了一套能够发出超大规模用户请求的流量平台。流量平台由一个...
  • 机房是网络设备存放的地方,关系着网络系统的稳定。机房的网络设备需要经常维护保养,才能保证正常的用网需求,下面简要介绍机房网络设备保养的六点注意内容。 (机房) 对各个系统实施严格管理,现场设常驻维保...
  • 摘要:设计了基于场效应管和20位DA芯片的高稳定度精密可调恒流源,可以根据负载变化调整管压降反馈的补偿电路。分析影响恒流源的几大因素后,对主要模块通过光耦隔离等手段进行电气隔离降低数字电路引入的干扰,对...
  • 寻找一些系统正常运行状态下的可度量指标,作为基准的“稳定状态” 假设实验组和对照组都能继续保持这个“稳定状态” 对实验组进行事件注入,如服务器崩溃、硬盘故障、网络连接断开等等 ...
  • 深入探索Android稳定性优化

    万次阅读 多人点赞 2020-03-12 12:12:31
    如果我们的App不稳定,并且经常不能正常地提供服务,那么用户大概率会卸载掉它。所以稳定性很重要,并且Crash是P0优先级,需要优先解决。 而且,稳定性可优化的面很广,它不仅仅只包含Crash这一部分,也包括卡顿、...
  • 生产异常情况的处理流程在生产过程中,生产日计划不能够执行到位,很多时候并不是计划本身有问题,而是在执行计划的过程中,产品在生产的过程中会出现各类异常。生产异常主要有来料品质的异常、人员的异常、制程品质...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 104,955
精华内容 41,982
关键字:

如何稳定正常生产