手艺选型

* Redis http://www.redis.net.cn/ http://doc.redisfans.com/* Tair http://code.taobao.org/p/tair/wiki/index/

作者: 码蹄疾毕业于哈尔滨工业大学。
小米广告第三代广告引擎的设计者、开发者;负责小米应用商店、日历、开屏广告业务线研发;主导小米广告引擎多个模块重构;关注推荐、搜索、广告领域相关知识;

技术选型
在技术选型的问题:我们是做属于分销软件的公司,用的是swt和PB来开发的用了WebSphere中间件。数据库用的是甲骨文。
现在想把后台的PB改用web的。

一、构建工具

gulp    任务管理,对任务文件流式操作,内存中完成,效率高

grunt    任务管理,对任务文件先读取再写入,效率低,被gulp取代

webpack    编译、打包

fis    百度内部推荐的集成方案

prepack    Facebook推出的代码优化方案,即时运行编译工具

rollup    和webpack功能相似

构建工具用于:资源压缩、静态资源转换、模块化处理、编译处理

介绍后台管理系统常见的组合搭配。主要是从业务逻辑层的实现和视图层考虑。

适用

  1. 需要使用复杂数据结构,map/set中元素很多
  2. 延迟敏感服务

图片 1redis数据结构图片 2String

不知道用什么好 😯

二、MVVM框架

Vue.js

Reace.js

Angular.js

1:Angular+Bootstrap

市面上比较常用的,而且使用历史相对比较长。不多说。

不适用

  1. 数据量超过600GB(数据太多,全内存太浪费资源)
  2. 需要多语言客户端支持

这应该是应用最广泛的了,简单的 key-value 类型。value 不仅可以是
String,也可以是数字。还可以享受 Redis 的定时持久化(可以选择 RDB
模式或者 AOF 模式),操作日志及 Replication 等功能。

三、模块化设计

CSS模块化设计

Javascript模块化设计

自适应模块化设计

2: React +Ant Design

适用

  1. 不能容忍数据丢失
  2. 数据量大,内存放不下的服务

图片 3Set

四、代码维护及复用性设计

需求变更

产品迭代

Bug定位

新功能开发

简介:

AntD是由蚂蚁金服技术团队开发的,从名字上也可以看出来哈。
此搭配组合服务于企业级后台产品。
官网:
https://ant.design/index-cn

不适用

  1. 使用复杂数据结构,map/set中元素很多

利用 Redis 提供的 Set 数据结构,可以存储一些集合性的数据。Redis
非常人性化的为集合提供了求交集、并集、差集等操作。

特性:

特性#
提炼自企业级中后台产品的交互语言和视觉风格。

开箱即用的高质量 React 组件。

使用 TypeScript 构建,提供完整的类型定义文件。

基于 npm + webpack + babel 的工作流,支持 ES2015 和 TypeScript。

1.访问模式

具体参数 Redis Redis Cluster Tair
支持Value大小 理论上不超过1GB 理论上不超过1GB 256M(更大value还需要测试)
支持Value结构 byte[]/list/map/set byte[]/list/map/set kv/map/list支持big_list(list无长度限制)支持创建schema,cmd query
支持的总数据量 1000+instance scale out,理论上总数据量无限制
适宜的读写比 存内存型,均适合 存内存型,均适合 支持多引擎,适宜各种比例的读写。读多写少(mdb+leveldb),读少写多。
数据是否可改写 Y Y Y
是否支持Scan/Range Query 不支持,并且不支持merge operations 支持scan;支持range query
CAP CP 用户可配置,CP或AP
语言支持 主流语言 主流语言,目前java、ruby可用 php,restful,java,c/c++
数据自动过期 支持 支持 支持

Set 和 String 是在广告系统中使用最广泛的redis数据结构。

3:Vue+iView

2.访问性能

具体参数 Redis Redis Cluster Tair
点写latency 虚机上平均1~2ms 虚机上平均1~2ms 5~8ms(write through),1ms左右(write back)
点写吞吐率 一个instance 5w,单机器整体性能根据cpu来决定 一个instance 5w,单机器整体性能根据cpu来决定 受限网卡带宽瓶颈,单机纯内存8w~10w qps(key+value=1k)
批量写吞吐率 受限网卡带宽瓶颈 受限网卡带宽瓶颈 受限网卡带宽瓶颈,单机纯内存8w ~10w batch/s(batch=10keys,key+value=100,batch_size=1k)
读latency 虚机上平均1~2ms 虚机上平均1~2ms 同机房内存1ms,磁盘5-8ms(延迟不会随单机数据容量增加而增加)

图片 4List图片 5Hash

简介:

iView 主要服务于 PC 界面的中后台业务,是一套高质量的开源 UI
组件库,先上地址:
https://github.com/iview/iview
官网是:
https://www.iviewui.com/

3.可运维性

具体参数 Redis Redis Cluster Tair
可扩展性(自动扩容、在线扩容) 支持水平扩展 在不停读和写的服务下自动扩容
可用性(是否有单点、数据迁移/单机出错时是否会有服务中断、过载保护、慢查询保护) 使用keepalived或者官方哨兵来保持高可用 无单点 不中断服务有过载保护无慢查询保护,但有慢查询递归树监控
可靠性(如何防止数据丢失,包括机器断电、硬盘损毁等情形下) 0~N个数据slave备份(实际使用情况基本是0个备份) 0~N个数据slave备份(实际使用情况基本是0个备份) 多机数据冗余断电数据不丢失,重放redo log数据完整性crc校验
数据可靠性 用户可选是否开启持久化 用户可选是否开启持久化 强,有持久存储,一般不会丢失数据
多副本 支持 支持 支持(副本平时不提供读写)
副本一致性 可根据业务需求配置强一致/弱一致
持久化 支持。持久化的数据是用于重启后的数据恢复。Redis是一个内存数据库,无论是RDB还是AOF,都只是其保证数据恢复的措施。 支持。持久化的数据是用于重启后的数据恢复。Redis是一个内存数据库,无论是RDB还是AOF,都只是其保证数据恢复的措施。 支持
对业务混合部署的支持 进程级隔离(特殊处理可以到机器间隔离) 进程级隔离(特殊处理可以到机器间隔离) 硬软隔离:支持不同group的业务混步支持同一个group业务混步,支持网络和内存的隔离。
对访问权限的可控制性 web操作管理员授权.api操作支持鉴权和非鉴权两种模式 web操作管理员授权.api操作支持鉴权和非鉴权两种模式 机器粒度的白名单管理
实现语言、代码量 JAVA,java客户端14000行、管理中心22000行 JAVA,java客户端14000行、管理中心22000行 核心代码c++,10w行左右

欢迎关注 高广超的简书博客 与 收藏文章 !欢迎关注 头条号:互联网技术栈

个人介绍:

高广超:多年一线互联网研发与架构设计经验,擅长设计与落地高可用、高性能、可扩展的互联网架构。

本文首发在 高广超的简书博客 转载请注明!

图片 6简书博客图片 7头条号

和Sets相比,Sorted Sets是将 Set 中的元素增加了一个权重参数
score,使得集合中的元素能够按 score
进行有序排列,比如一个存储全班同学成绩的 Sorted Sets,其集合 value
可以是同学的学号,而 score
就可以是其考试得分,这样在数据插入集合的时候,就已经进行了天然的排序。

特性:

使用单文件的 Vue 组件化开发模式
基于 npm + webpack + babel 开发,支持 ES2015
高质量、功能丰富
友好的 API ,自由灵活地使用空间
详细、友好的文档,事无巨细

网上的文章讲到这里的时候都会说Redis的Set提供了一些方便的交集、并集、差集的操作。但是实际上我们在生产环境的时候不会用这些操作,数据库一般是系统压垮的最后一根稻草,如果数据库垮了,基本就是系统GG了。补救办法基本没有。所以,选型的时候能让服务器做的,就不会让数据库做,所以交集、并集、差集这些操作会放在服务器的内部逻辑去做。如果服务器撑不住,大不了就加机子嘛。

提供功能组件:

目前是0.9版本,下边是1.x版本计划涵盖的功能。

图片 8

image.png

4:jQuery+JQueryUI
如果是传统的项目,可以继续选择这套方案。

我们系统中,大多数时候是用key/value的结构。从某种意义上他们两个在逻辑上可以实现等价。

1. key -> "value1,value2,value3,value4"2. key -> Set(value1,value2,value3,value4)

第一种我们直接用string,只不过value的获取完我们自己分割。用哪种还是看你们的业务场景。Set的缺点是比string占用更多的空间;优点是天然的是value之间是不会重复的。

  1. 我们线上系统用户已经安装的app是多个地方上报的,我们就用Set去存储,每次上报就直接更新就可以,如果这时候我们用的是String就不太适合,因为要读一次redis,做一次去重,再写入;
  2. 我们线上使用的已经曝光的广告不想让用户看到这个功能我们就用的是String,因为我们每次下发的广告已经从逻辑上保证了不是重复的.

热门阅读

    1. 跳跃游戏
  • CountDownLatch运用场景、图片 9Leetcode名企之路

发表评论

电子邮件地址不会被公开。 必填项已用*标注