• 我对Web开发的认识


    前端

    • 使用mvvm框架,每个视图维护自己的数据模型,更专注于视图模型及状态,在框架的帮助下规范视图与后端的交互及减轻工作量

      我的选择是avalon.js

    • 解耦前后端开发
    • 自有资源独立管理,向后端开放资源使用的接口
    • 拿到后端静态资源标识后,按照约定独立运算获得资源URL,不需要后端参与

    后端

    业务入口

    • 任意语言的web开发框架都可以
    • 主要任务是把HTTPRequest转换为RequestContext
    • 对RequestContext做基本的验证,如有效性、入口权限等
    • 按照HTTP接口约定,调用相应的服务并返回Response

    服务

    • 爬虫服务使用Python,开发简单、相关类库丰富、可跨平台部署
    • 搜索服务使用Java,目前在这块还没有实践经验,看好ElasticSearch
    • 图片服务,任意带丰富图片处理类库的语言都可以
      • 接口约定应该允许客户端用参数指定返回的图片的长宽
      • 接口需要直接对外公开
    • 邮件服务

    业务入口及服务都应该做到可容易水平扩展,甚至分布式

    数据库

    方案一

    • 关系数据库选择postgresql
      • 应对复杂查询的能力比mysql强
      • 对json数据有很好的支持,可以省掉用来保存无结构key-value数据的nosql数据库
      • 对地理数据有很好的支持
      • 自带优秀的读scalability
      • 写scalability有postgresql-xl
      • pg vs mysql
    • redis做缓存

    方案二

    • 任意对事务支持良好、可多线程访问的关系数据库
      • 需要考虑读、写scalability
    • redis用作nosql,主要处理key-value数据
    • redis用作缓存

    高并发读不是什么大问题,缓存+数据库集群能很好的解决。难点在于用数据库集群应付高并发写的同时需要保证ACID。

    反向代理

    毫无疑问是nginx

    运维

    运维也是重要的需求方

    目标

    • 掌握资源使用情况
    • 限制应用可接触的资源
    • 资源总量能迅速扩张
    • 任何操作都能回滚(time machine机制)
    • 任何操作都有历史记录
    • 任何数据和操作都可视化

    策略

    • 限制应用的访问权限
      • 自身所在目录
      • 以环境变量指定的目录,如APP_LOG_HOME、APP_DATA_HOME、APP_UPLOAD_HOME
      • 有必要的话用特定账户运行该应用
    • 应用日志格式须由运维指定,既要人类可读,又要方便代码解析

      日志记录应该是非阻塞的

    • 监控应用进程占用的系统资源
  • 相关阅读:
    从零开始设计一套指令集及其虚拟机
    一种高效整数开平方算法:逐比特确认法
    C 可变参数函数的本质
    C 基础数据类型 性能测试
    用C在GBA上写光线追踪(0)配置开发编译环境
    用C#写小工具:将圆柱面贴图映射到半球贴图
    Linux 硬盘UUID相同处理方法
    ELK6.x_Kafka 安装配置文档
    Nagios4.x安装配置总结
    Cacti-0.8.8b详细安装及配置步骤
  • 原文地址:https://www.cnblogs.com/inside/p/4414821.html
Copyright © 2020-2023  润新知