京东618脑洞大开的小游戏游戏中let's go怎么过?

《牛津少儿英语歌唱本 LET`S GO歌唱本2 LET`S CHANT LET`S SING》【摘要 书评 试读】- 京东图书
迪格图书专营店
牛津少儿英语歌唱本 LET`S GO歌唱本2 LET`S CHANT LET`S SING
与行业相比
京 东 价 &
[定价 &¥]
PLUS会员专享价
您购买此商品可享受专属价
增值业务 &
重  量 &
搭配赠品 &
加载中,请稍候...
加载中,请稍候...
加载中,请稍候...
加载中,请稍候...
加载中,请稍候...
规格与包装
商品介绍加载中...
扫一扫,精彩好书免费看
出版社上海教育出版社
权利声明:京东上的所有商品信息、客户评价、商品咨询、网友讨论等内容,是京东重要的经营资源,未经许可,禁止非法转载使用。
注:本站商品信息均来自于合作方,其真实性、准确性和合法性由信息拥有者(合作方)负责。本站不提供任何保证,并不承担任何法律责任。
印刷版次不同,印刷时间和版次以实物为准。
价格说明:
京东价:京东价为商品的销售价,是您最终决定是否购买商品的依据。
划线价:商品展示的划横线价格为参考价,该价格可能是品牌专柜标价、商品吊牌价或由品牌供应商提供的正品零售价(如厂商指导价、建议零售价等)或该商品在京东平台上曾经展示过的销售价;由于地区、时间的差异性和市场行情波动,品牌专柜标价、商品吊牌价等可能会与您购物时展示的不一致,该价格仅供您参考。
折扣:如无特殊说明,折扣指销售商在原价、或划线价(如品牌专柜标价、商品吊牌价、厂商指导价、厂商建议零售价)等某一价格基础上计算出的优惠比例或优惠金额;如有疑问,您可在购买前联系销售商进行咨询。
异常问题:商品促销信息以商品详情页“促销”栏中的信息为准;商品的具体售价以订单结算页价格为准;如您发现活动商品售价或促销信息有异常,建议购买前先联系销售商咨询。
价 格: 到
   
iframe(src='//www.googletagmanager.com/ns.html?id=GTM-T947SH', height='0', width='0', style='display: visibility:')京东618直播秀—陈赫当场撩妹!_腾讯视频
三倍流畅播放
1080P蓝光画质
新剧提前看
1080P蓝光画质
纯净式无框播放器
三倍流畅播放
扫一扫 手机继续看
下载需先安装客户端
{clientText}
客户端特权:
3倍流畅播放
当前播放至 {time}
扫一扫 手机继续看
京东618直播秀(二)—陈赫当场撩妹!
奔跑吧兄弟 第4季
女神团来袭!贾玲霸道登场吓傻陈赫,baby猛抛媚眼!兄弟团上演泥潭大战。
2017跨界歌王
奶爸陈赫献歌女儿,高云翔出状况失声飙泪。
跑男来了 第4季
郑恺Gary欲合伙做生意,李晨宋智孝搭档电话通知范冰冰。
奔跑吧 第2季
第4期:跑男团学霸龙舟赛!
陈赫新婚视频,甜蜜虐狗不商量,新娘为什么不是胡一菲?
美女叫来滴滴打车,没想到看到司机是陈赫之后就不淡定了,蒙圈了
热巴baby数学这么差?接连算错九九乘法,陈赫都看不下去了!
陈赫整蛊吓路人!路人差点吓得摔个跟头!
从陈赫生日看出谁才是跑男的人气王?邓超的祝福亮了!
陈赫“天才一跳”秒杀世界散打冠军
陈赫吃个拉面都被老板套路,老板:假一赔十,来一碗面,十一个蛋
跑男团论脑洞最大我只服热巴,竟连天才陈赫都被折服了!
喜剧总动员
陈赫产女后回归遭贾玲误伤,程野变土豪请欧弟演戏。
爱情公寓穿越明朝
跑男来了 第5季
热巴保护鹿晗超man!baby能量爆棚平均速度40迈
王牌对王牌 第2季
陈赫再演《爱情公寓》曾小贤,宋茜扮紫霞仙子含泪挥剑
别让陈赫宋小宝和徐峥同台,台下观众笑得直不起腰了!
陈赫套路黄景瑜
心思缜密设下“套中套”
陈赫又和CF来搞事情了,快来看看赫哥的枪法如何!
纯享版:陈赫、小沈阳《光辉岁月》
热巴为救鹿晗被撕掉名牌,鹿晗自责当场发飙为胖迪报仇秒撕陈赫
陈赫娄艺潇跨界合作《因为爱情》好听极了
陈赫爆笑扮演芈月表白义渠君,马苏变身魏夫人画风太搞怪
热巴第一送见面礼,鹿晗的最豪华,陈赫竟送这东西,邓超都笑喷了
拜托了冰箱 第3季
回忆杀!娄艺潇陈赫重现《爱情公寓》经典,王嘉尔自曝是杨紫迷弟?
副标题要不要
副标题要不要
副标题要不要
副标题要不要
副标题要不要
副标题要不要
副标题要不要
副标题要不要
副标题要不要
副标题要不要
副标题要不要
副标题要不要
副标题要不要
副标题要不要
副标题要不要
副标题要不要
副标题要不要
副标题要不要
副标题要不要
副标题要不要
副标题要不要京东618脑洞大开这个游戏怎么通过求大神攻略? - 知乎2被浏览14分享邀请回答0添加评论分享收藏感谢收起写回答登录以解锁更多InfoQ新功能
获取更新并接收通知
给您喜爱的内容点赞
关注您喜爱的编辑与同行
966,690 四月 独立访问用户
语言 & 开发
架构 & 设计
文化 & 方法
您目前处于:
京东618:商城分布式智能容器DNS实践
京东618:商城分布式智能容器DNS实践
鲍永成、陈书刚
0&他的粉丝
日. 估计阅读时间:
,PWA、Web框架、Node等最新最热的大前端话题邀你一起共同探讨。
亲爱的读者:我们最近添加了一些个人消息定制功能,您只需选择感兴趣的技术主题,即可获取重要资讯的。
相关厂商内容
相关赞助商
本文介绍的DNS命名为ContainerDNS,作为京东商城软件定义数据中心的关键基础服务之一,具有以下特点:
分布式,高可用
自动发现服务域名
易于维护、易于动态扩展
容器化部署
图一 ContainerDNS 架构图
ContainerDNS 包括四大组件 DNS Server、Service to DNS 、User API 、IP status check。这四个组件通过etcd 集群结合在一起,彼此独立,完全解耦,每个模块可以单独部署和横向扩展。
DNS Server 用于提供DNS 查询服务的主体,目前支持了大部分常用的查询类型(A、AAAA、SRV、NS、TXT、MX、CNAME等)。
Service to DNS 组件是JDOS 集群与DNS Server的中间环节,会实时监控JDOS集群的服务的创建,将服务转化为域名信息,存入etcd 数据库中。
User API 组件提供restful API,用户可以创建自己的域名信息,数据同样保持到etcd数据库中。
IP status check 模块用于对系统中域名所对应的IP做探活处理,数据状态也会存入到etcd数据库中。如果某一个域名对应的某一个IP地址不能对外提供服务,DNS Server 会在查询这个域名的时候,将这个不能提供服务的IP地址自动过滤掉。
二、系统设计与实现
(1)DNS Server
DNS Server 是提供DNS的主体模块,系统中是挂载在项目ContainerLB(一种基于DPDK平台实现的快速可靠的软件网络负载均衡系统)之后,通过VIP 对外提供服务。结构如下:
图二 DNS Server与ContainerLB
如上图所示,DNS Server 通过VIP对外提供服务,通过这层LB可以对DNS Server做负载均衡,DNS Server的高可用、动态扩展都变得很容易。同时DNS Server的数据源依赖于etcd数据库,所以对DNS Server的扩展部署十分简单。由于etcd是一种强一致性的数据库,这也有效保障挂在LB后面的DNS Server 对外提供的数据一致性。
DNS Server作为JDOS集群的DNS服务,所以需要把服务器的地址传给容器。我们知道JDOS的POD 都是由JDOS Node节点创建的,而POD指定DNS服务的地址和域名后缀。最终体现为Docker 容器的/etc/resolv.conf 中。
DNS Server 的启动过程
DNS Server 首先根据用户的配置,链接etcd数据库,并读取对应的域名信息放在程序的缓存中。然后启动watch监听etcd 的变化,同步数据库与缓存中的数据。新的DNS请求不用在查询etcd 数据库直接使用缓存中的数据,从而提高响应的速度。启动后监听用户配置的端口(默认53号),对收到的数据包进行处理。同时查出过得结果会缓存的DNS-Server的内存缓存中,对于缓存的数据不老化删除,就是说查询过的域名会一直在缓存中以提高查询的速度,从而达到很高的响应性能。如果域名信息发生变化,DNS Server 通过监听etcd 随时感知这种变化,从而更新缓存中的数据,从而提供很好的实时性。测试发现,从发生变化到能查出变更预期的结果一般在20ms以内,坏的情况不超过50-60ms。
上图是DNS Server 响应一次查询的过程。首先根据域名和查询的类型生成一个数据缓存的索引,然后查询DNS 数据缓存如果命中,简单处理返回给用户。没有命中从数据库查询结果,并将返回的结果插入到数据缓存中,下次查询直接从缓存中取得,提高响应速度。为了进一步提高性能,缓存的数据不会老化删除,只有到了缓存的数量限制才会随机删除一些释放空间。不删除缓存,缓存中的数据和实际的域名数据的一致性就是一个关键的问题。我们采用etcd 监控功能实时抓取变更,从而更新缓存的数据,经过几个星期的不停地循环,增、删、改、查域名,近10亿次测试,未出现数据不一致的情况。下面是DNS Server 监控到域名信息变化的处理流程。
下面是DNS Server 的配置文件:
其中DNS 域主要是对DNS的配置,DNS-domains 提供可查询的域名的zone,支持多组用%分隔。ex-nameServers 如果不是配置的域名,DNS Server 会将请求转发到这个地址进行解析。解析的结果再通过DNS Server 转给用户。inDomainServers 选择做已知域名zone的转发功能。首先如果访问的域名匹配到inDomainServers, 则交给inDomainServers指定的服务器处理,其次如果匹配到DNS-domains则查询本地数据,最后如果都不匹配则交给ex-nameServers 配置的DNS服务器处理。IP-monitor-path 是用于和探活模块做数据交互的,系统中的IP 状态会存在etcd此目录下。DNS Server 读取其中的数据,并监控数据的变化,从而更新自己缓存中的数据。
DNS Server 另外提供两个附加的功能,可以根据访问端的IP地址做不同的处理。Hold-one如果使能,同一个客户端访问同一个域名会返回一个固定的IP。而random-one 相反,每次访问返回一个不同的IP。当然这两个功能在一个域名对应多个IP的时候才能体现出来。
为了提高查询速度,查询的域名会放在缓存中,cacheSize 用于控制缓存的大小,以防止内存的无限之扩张。DNS Server 由于采用的是Go 语言,cache 被设计为普通的字典,字典的key 就是域名和访问类型的组合生成的结果。
DNS Server 提供统计数据的监控,通过restful API 用户可以读取DNS的历史数据,访问采用了简单的认证,密码通过配置文件配置。用户可以访问得到DNS Server启动后查询域名的总的次数、成功的次数、查询不到次数等信息。用户同样可以得到某一个域名的查询次数和最后一次访问的时间等有效信息。通过DNS Server统计信息,方便做集群的数据统计。效果如下:
(点击放大图像)
(点击放大图像)
(2)Service to DNS
这个组件的主要功能是通过JDOS 的 JDOS-APIServer的watch-list 接口监控用户创建的Service和以及endpoint的变化,从而生成一条域名记录,并将域名记录导入到etcd数据库中。简单的结构如下图。Service to DNS 进程,支持多点冗余,防止单点故障。
Service to DNS 生成的域名主要目的是给Docker 容器内部访问,域名的格式是ServiceName.nameSpace.svc. clusterDomain。这个格式的要求和JDOS 有密切的关系,我们知道JDOS 创建POD的时候,传递数据生成容器的resolv.conf 文件。下面是JDOS 的代码片段及Docker 容器的 resolv.conf文件的内容。
可以看到域名采用的是ServiceName.NameSpace.svc.clusterDomain的命名格式,故而
Service to DNS需要监控JDOS集群的Service的变化,以这种格式生成相关的域名。由于系统对用户创建的服务会自动的创建load-balance的服务,所以域名的IP对应的是这个服务关联的lb的IP,而lb的后端才是对应着的是真正提供服务的POD。
Service to DNS 进程有两种任务:分别做数据增量同步和数据全量同步。
增量同步调用JDOS-API 提供的watch 接口,实时监控JDOS集群Service 和 endpoint 数据的变化,将变化的结果同步到etcd数据库中,从而得到域名的信息。由于各种原因,增量同步有可能失败,比如操作etcd数据库,由于网络原因发生失败。正如此全量同步才显得有必要。全量同步是个周期性的任务,这个任务首先同步JDOS-API 的list 接口得到,集群中的Service信息,然后调用etcd 的get 接口得到etcd中存储域名数据信息,然后将两边的数据左匹配,从而保证JDOS集群中的Service数据和etcd的域名数据完全匹配起来。
另外,Service to DNS 支持多点部署的特性,所以有可能同时多个Service to DNS服务监听到JDOS集群数据的变化,从而引起了同时操作etcd的问题。这样不利于数据的一致性,同时对相同的数据,多次操作etcd,会多次触发etcd的变更通知,从而使得DNS Server监听到一些无意义的变更。为此etcd的读写接口采用了Golang的Context库管理上下文,可以有效地实现多个任务对etcd的同步操作。比如插入一条数据,会首先判断数据是否存在,对于已经存在的数据,插入操作失败。同时支持对过个数据的插入操作,其中有一个失败,本次操作失败。
配置文件如下:
其中etcd-Server 为etcd集群信息,这个要与DNS Server的配置文件要一致。Host字段用于区别Service to DNS的运行环境的地址,此数据会写到etcd数据库中,可以很方便看到系统运行了多少个冗余服务。IP-monitor-path 写入原始的IP数据供探活模块使用。JDOS-domain 域名信息,这个要和DNS Server保持一致,同时要和JDOS启动的--cluster-domain选项保持一致,数据才能被Docker 容器正常的访问。JDOS-config-file 文件是JDOS-API的访问配置信息,包括认证信息等。
(3)User API
User API 提供restful API,用户可以配置自己域名信息。用户可以对自己的域名信息进行增、删、改、查。数据结果会同步到etcd数据库中,DNS Server 会通过监听etcd的变化将用户的域名信息及时同步到DNS Server的缓存中。从而使得用户域名数据被查询。
简单的配置如下:
API-domains支持多个域名后缀的操作,API-auth 用于API 认证信息。其他信息IP-monitor-path等和Service to DNS 模块的功能相同。具体的API的使用见
(4)IP status check
IP status check组件对域名的IP进行探活,包括DNS-scheduler和DNS-scanner 两个模块。DNS-scheduler模块监控Service to DNS 和uer API 组件输入的域名IP的信息,并将相关的IP探活合理地分配给不用的DNS-scanner任务;DNS-scanner模块负责对IP的具体的周期探活工作,并将实际的结果写到指定的etcd数据库指定的目录。DNS Server 组件会监听etcd IP 状态的结果,并将结果及时同步到自己的缓存中。
三、功能验证
Docker 容器中验证
服务器验证:
API 验证:
IP status check 验证:
可以当192.168.10.1的状态变成DOWN后,查询DNS Server,192.168.10.1的地址不会再出现在返回结果中。
四、性能优化
ContainerDNS 的组件的交互依赖于etcd,etcd是由Go语言开发了。ContainerDNS也采用Go 语言。
测试环境:
CPU: Intel(R) Xeon(R) CPU E5-2640 v3 @ 2.60GHz
NIC: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01)
测试工具:queryperf
域名数据:1000W条域名记录
性能数据:
从上面三个表中可以清晰地看出,走etcd 查询速度最慢,走缓存查询速度提升很多。同样,不存在缓存老化。所以程序优化的第一步,就是采用了全缓存,不老化的实现机制。就是说DNS Server 启动的时候,将etcd中的数据全量读取到内存中,后期watch到etcd数据的变更,实时更新内存中的数据。全缓存一个最大的挑战就是etcd的数据要和缓存中的数据的一致性。为此代码中增加了很多对域名变更时,对缓存的处理流程。同时为了防止有watch不到的变更(一周稳定性测试10亿次变更,出现过一次异常),增加了周期性全量同步数据的过程,这个同步粒度很细,是基于域名的,程序中会记录每次域名变更的时间,如果发现同步的过程中这个域名的数据发生变化,这个域名本次不会同步,从而保证了缓存数据的实时性,不会因为同步导致新的变更丢失。
同时我们采集了每一秒的响应情况,发现抖动很大。而且全缓存情况下queryperf 测试虽然平均能达到10W TPS,但是抖动从2W-14W 区间较大。
通过实验测试进程CPU损耗,我们发现golang GC对CPU的占用很大。
同时我们采集了10分钟内存的情况,如下
可以发现,系统动态申请了好多内存大概200多个G,而golang GC会动态回收内存。
gc 18 @460.002s 0%: 0.030+44+0.21 ms clock,
0.97+1.8/307/503+6.9 ms cpu, 477-&482-&260 MB, 489 MB goal, 32 P
gc 19 @462.801s 0%: 0.046+50+0.19 ms clock,
1.4+25/352/471+6.3 ms cpu, 508-&512-&275 MB, 521 MB goal, 32 P
gc 20 @465.164s 0%: 0.067+50+0.41 ms clock,
2.1+64/351/539+13 ms cpu, 536-&541-&287 MB, 550 MB goal, 32 P
gc 21 @467.624s 0%: 0.10+54+0.20 ms clock,
3.2+65/388/568+6.2 ms cpu, 560-&566-&302 MB, 574 MB goal, 32 P
gc 22 @470.277s 0%: 0.050+57+0.23 ms clock,
1.6+73/401/633+7.3 ms cpu, 590-&596-&313 MB, 605 MB goal, 32 P
由于golang GC 会STW(Stop The World),导致GC处理的时候有一段时间所有的协程停止响应。这也会引起程序的抖动。高级语言都带有GC功能,只要是有内存的动态使用,最终会触发GC,而我们可以做的事是想办法减少内存的动态申请。为此基于pprof 工具采集的内存使用的结果,将一些占用大的固定size的内存放入缓存队列中,申请内存首先从缓存重申请,如果缓存中没有才动态申请内存,当这块内存使用完后,主动放在缓存中,这样后续的申请就可以从缓存中取得。从而大大减少对内存动态申请的需求。由于各个协程都可能会操作这个数据缓存,从而这个缓存队列的设计就要求其安全和高效。为此我们实现了一个无锁队列的设计,下面是入队的代码片段。
目前对512字节的msg数据结构做了缓存。用pprof 采集内存使用情况如下:
可以看到内存由原来的200G减少到120G,动态申请内存的数量大大减小。
同时性能也有所提升:
10分钟内的采集结果可以看出,抖动从原来的2-10W 变成现在的10-16W,抖动相对变小。同时queryperf测试每秒大概14W TPS,比原来提高了4W。
本文主要介绍了ContainerDNS在实际环境中的实践、应用和一些设计的思路。全部的代码已经开源在GitHub上(详见 )。我们也正在做一些后续的优化和持续的改进。
鲍永成,京东商城 基础平台部技术总监。2013年加入京东,负责京东容器集群平台(JDOS)研发,带领团队完成京东容器大规模落地战略项目,有效承载京东全部业务系统和80%数据库,特别在大促期间 scale up 秒级弹性应对高峰流量。目前聚焦在京东容器集群 JDOS 2.0 以及京东敏捷智能数据中心研发。服务过土豆网(TUDOU.COM),思科(CRDC)等,在分布式、虚拟化、容器、数据中心建设有丰富的实践经验。
陈书刚,京东商城基础平台部软件工程师,有着多年从事数通产品的开发、协议报文解析的工作的经验,目前主要从事基础网络功能的开发与维护。
Author Contacted
语言 & 开发
411 他的粉丝
架构 & 设计
912 他的粉丝
59 他的粉丝
0 他的粉丝
0 他的粉丝
1 他的粉丝
2 他的粉丝
告诉我们您的想法
允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p
当有人回复此评论时请E-mail通知我
允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p
当有人回复此评论时请E-mail通知我
允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p
当有人回复此评论时请E-mail通知我
赞助商链接
InfoQ每周精要
订阅InfoQ每周精要,加入拥有25万多名资深开发者的庞大技术社区。
架构 & 设计
文化 & 方法
InfoQ.com及所有内容,版权所有 ©
C4Media Inc. InfoQ.com 服务器由 提供, 我们最信赖的ISP伙伴。
极客邦控股(北京)有限公司
找回密码....
InfoQ账号使用的E-mail
关注你最喜爱的话题和作者
快速浏览网站内你所感兴趣话题的精选内容。
内容自由定制
选择想要阅读的主题和喜爱的作者定制自己的新闻源。
设置通知机制以获取内容更新对您而言是否重要
注意:如果要修改您的邮箱,我们将会发送确认邮件到您原来的邮箱。
使用现有的公司名称
修改公司名称为:
公司性质:
使用现有的公司性质
修改公司性质为:
使用现有的公司规模
修改公司规模为:
使用现在的国家
使用现在的省份
Subscribe to our newsletter?
Subscribe to our industry email notices?
我们发现您在使用ad blocker。
我们理解您使用ad blocker的初衷,但为了保证InfoQ能够继续以免费方式为您服务,我们需要您的支持。InfoQ绝不会在未经您许可的情况下将您的数据提供给第三方。我们仅将其用于向读者发送相关广告内容。请您将InfoQ添加至白名单,感谢您的理解与支持。}

我要回帖

更多关于 脑洞大开问题游戏 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信