• 我一年来的工作和体会 from 66 (alpha)


    ----
    我一年来的工作和体会:
    关键词:理论、实践、商用系统、人际
    (一)对比:真实项目vs实验室模型

    作为一个做技术的,经常思考沉淀才有醒悟,裹脚于技术中,看不到应用的前景,不是什么好事。
    现在列出我的想法如下:

    1)真实项目中,甲方、乙方按着合同行事。实验室项目无非学生按着老师想法实现,具体质量难保证。

    在软件设计原则中,对应有dbc (design by contract)的说法。这句话的翻译,我认为,约定的做好,没有要求的就不做。
    既然是约定,就要把基础功能先实现,附加功能后实现,不要求的功能不实现。
    很多时候,我们学生在实现时,抓不到主线,在边角,在不要求的功能上耽搁很多时间。

    2)真实项目上线就像上战场,实验室项目上线很多时候走过场。
    没有经历过“智能电网-220kv变电站网络管理系统”的上线,我不会知道,
    项目上线是门功夫活。
    项目整个过程中的需要单人管理代码版本,
    项目上线前3天的基线版本最后不能变,且该版本要严格经过测试。

    项目上线是乙方对甲方的演示过程,整个演示过程需要充分体现自己的工作点。
    项目上线中不免出现问题,要提前准备好相应的应对措施。

    3)要明确实验室的环境和 项目真实上线环境的区别。
    很多时候,我们研制的项目所需要的客观环境不能一一满足,比如一套上百万的设备不可能直接搬到学校。
    我们只能在实验室自己模拟,既然还是模拟,设计出来的产品必然跟真实有差距。
    针对这方面问题,要努力跟甲方沟通,要尽量减少设备等因素对项目研制的干扰。
    并且在上线前,充分估计下每个功能点在实测时需要的数据。一句话,上线后的数据会说话,要抓住这个数据和结果来优化项目。


    (二)论商用系统的高可靠性和稳定性。
    跟一些金融做it的同学打过交流,他们做的技术往往不是最新的,但往往是最稳定的,
    拿最近做的项目来说,“智能电网-220kv变电站网络管理系统”(后称nms),此项目的要求就是高可靠性和稳定性。
    为了达到这一点,我们在项目中实施了压力测试。具体方法如下:
    1)产生5000次随机点击,1秒钟一次,看界面是否正常响应、响应速度、系统资源消耗。
    nms第一版经受住100次就僵住了,经查有控件的组合没有实现对应的逻辑,
    还有些事件响应需要等待,比如拓扑发现时至少需要10秒钟以上,在该段事件内要用同步变量禁止所有事件的响应,

    改版后的第二版经受住1000次,整个系统就反应慢了,经查nms
    分配的有些对象必须要推出程序时才释放。简言之,分配内存的方案有问题。
    我们从以下解决:
    一次性分配足够的内存,避免过多的系统调用,
    把需要重用的部分缓存起来,

    再次改版,5000次随机点击可以通过,但有时不稳定,我们进入系统稳定性测试。
    整个稳定性测试,我们主要的内容是,设计尽量多的测试覆盖,抓住异常并处理。
    比如:网络连接异常,分配内存异常等等。


    ---------------简化版 总结。

    我一年来的工作和体会:
    一)对比:真实项目vs实验室模型

    1)真实项目中,甲方、乙方按着合同行事。实验室项目大多数是学生按着老师想法实现,难保证具体质量。
    2)真实项目上线就像上战场,实验室项目上线很多时候走过场。
    项目上线要把握至少3点:版本控制,功能点测试、上线应急处理方案等
    3)要明确实验室的环境和 项目真实上线环境的区别。
    简言之,充分估计环境差别,努力在实际环境中抓取数据来健壮自己的系统。

    (二)实践系统的高可靠性和稳定性。
    以“智能电网-220kv变电站网络管理系统”为例,
    此项目的要求就是高可靠性(7*24小时运行)和稳定性(系统内存10m以内)。
    为了达到这一点,我们在项目中实施了压力测试和稳定性测试。
    关键点有:量化系统短板,优化系统瓶颈,保证系统主要数据的稳定可靠。

    如上,是一年来技术上的一些想法。


    具体方法如下:

    1)系统保证90%事件响应在20s内响应,如果超过20s不响应,会保存相应结果并自动重启程序。
    2)不仅测试单个控件点击、测试单个控件连击(1s一次,连续100次),多个控件组合点击(尤其是有相关顺序的)
    3)当一个需要长时间响应的事件发生时,要禁用其他所有的事件响应
    4)系统的内存分配在1000次-5000次随机点击时,内存保证在10m以下。内存分配方案自己定制。
    5)系统的瓶颈部分,比如作图环节,考虑缓存,减轻作图压力。

    如上,仅仅是项目实践中的一些想法。

  • 相关阅读:
    package.json文件
    Node.js中模块加载机制
    第三方模块
    系统模块
    Node.js快速入门及模块化开发
    String 的扩展方法
    ES6 的内置对象扩展
    箭头函数
    解构赋值
    let、const、var 的区别
  • 原文地址:https://www.cnblogs.com/titer1/p/2759812.html
Copyright © 2020-2023  润新知