当前位置: 首页 > news >正文

移动网站建设指南周口市住房和城乡建设局网站

移动网站建设指南,周口市住房和城乡建设局网站,外行学网页制作与网站建设从入门到精通,网站只做优化摘要#xff1a;不顾谷歌CEO阻拦#xff0c;WhatsApp最终以190亿美元的价格花落Facebook。能获如此天价与其月4.5亿的活跃用户是分不开的#xff0c;同样不可或缺的还有支撑每日数百亿消息的高可靠架构。 【编者按】以190亿美元的价格出售给Facebook#xff0c;交易谈判过…摘要不顾谷歌CEO阻拦WhatsApp最终以190亿美元的价格花落Facebook。能获如此天价与其月4.5亿的活跃用户是分不开的同样不可或缺的还有支撑每日数百亿消息的高可靠架构。 【编者按】以190亿美元的价格出售给Facebook交易谈判过程中更受到了拉里·佩奇的劝阻WhatsApp确实取得了一场辉煌的胜利。然而不可忽视的是该公司用以服务4.5亿活跃用户的工程团队只有区区32人。近日HighScalability创始人Tod Hoff撰文分析了这一天价收购的原因和WhatsApp的高可靠架构虽然并不完整但还是有许多值得学习的地方。 以下为译文 从WhatsApp软件架构师Rick Reed在3月份即将发表的演讲介绍中Thats Billion with a B: Scaling to the next level at WhatsApp我们可以得知WhatsApp当下的一些轮廓 现在WhatsApp有数百个节点、数千个核心及数百TB的内存我们的目标是服务全世界数十亿用户。在WhatsApp我们使用了Erlang/基于FreeBSD服务器基础设施为了应对消息的增长需求我们必须克服一个又一个挑战可以说在系统容量大于8000核心和速度每秒Erlang消息超7000万上的极限挑战从未停歇 鉴于这个演讲在3月份才发布这里我们不妨聚焦Rick Reed两年前的分享—— WhatsApp如何应对数百万的同时链接数。 在Yahoo!供职时Rick Reed曾负责用C建立高性能的消息总线因此他对高扩展性架构并不陌生。WhatsApp创始人中还包括了一个拥有大量扩展经验的Yahoo!工程师不难得知WhatsApp有现在的成就与两个创始人的超凡技术是分不开的。而企图成为全世界50亿手机服务商的远大目标他们也必须将技术推向极限 190亿美元的交易的背后 做为一个程序员如果你问WhatsApp是否值那么多我的答案必然是否定的因为产品真正价值不在于那些死板的代码而在如何让用户喜欢并且使用。 着眼这个应用的特点我们知道WhatsApp是一个世界级的 零噱头零广告零创意零游戏产品在SMS收费时代提供了一个免费的信息交互平台。当下这个应用已被数量巨大的美国人使用因此一旦有用户加入即会在上面发现大量的亲朋好友。在手机如此普及年代WhatsApp绝对称得上填补了美国社交网络上的空白。鉴于其跨平台特性所以每个人都可以使用它值得关注的是它还可以传递各种格式信息比如共享地理位置、发送语音及视频等。WhatsApp有着非常出色的国际化使用手机号码作为验证信息、联系人列表作为社交图因此你不需要邮箱验证、用户名及密码更不需要提供信用卡等号码信息——“it just works”。 虽然WhatsApp有着如此的诱人特性但是它仍然不值190亿美元而且对于互联网巨头来说这样的特性模仿起来也并不复杂。 WhatsApp之所以能卖190亿美元可能有多个原因 第1 如Google CEO Larry Page所说第2 WhatsApp已经威胁到Facebook第3Facebook正在褪色需要补充大量新鲜血液第4 WhatsApp是你的电话簿第5WhatsApp可以收集到大量的元数据虽然他们并未保存。 准确的说190亿美元收购WhatsApp是为了它的 4.5亿用户为了它的日百万用户增加为了它可能会有10亿用户的潜能——Facebook需要WhatsApp成为下一个10亿用户应用当然只能成为它的一部分。同时40美元一个用户的价格也并不离谱特别是以股票充当大部分金额。Facebook曾今使用 30美元每用户的价格收购了Instagram而 Twitter的每个用户更值110美元。 Benedict Evans 做了一个非常棒的预测移动是一个万亿级的市场。WhatsApp通过每天发送180亿SMS消息整个SMS系统每天发送的消息也只有200亿条搅乱了整个SMS市场而这个市场有着超过1亿美元的税收。在智能手机采用越发普及的年代WhasApp有着比Facebook更清晰的盈利思路。然而在承诺了零广告和零干涉后Facebook又会从何处得益 在 移动应用业务开发上有着许多有趣的用例 WhatsApp则经常被项目团队用来建立会话组风投们也乐于将它作为交易流程中的对话工具。 Instagram被Kuwait用来出售绵羊。 WeChatWhatsApp的一个竞争者在1月份推出了一个叫车服务值得关注的是仅仅一个月这个应用上的 打车成交量就达到了2100万。 商业活动看起来确实很适合WhatsApp但是它的用途显然还有更多——西班牙警察使用它来抓捕罪犯意大利人们使用它来组织篮球比赛。 鉴于每个人都有手机而且消息应用已变得更加强大、自由及便宜商业及其它类型应用程序已逐步向移动端过渡。许多功能已不再只能用桌面或Web应用程序实现消息应用已初露锋芒。 其中许多应用已经对Facebook和Google产生威胁桌面和网络皆将成为过去 消息移动将让整个系统愈加偏离这些巨头的王国那么在这股移动的大潮中Facebook又该何去何从 随着移动化的更加深入Facebook的地位已愈发岌岌可危用户的流逝显然已不可避免。桌面Web是Facebook后端所有特性的入口它非常的肥胖、复杂及陈旧当下已经很少有人会喜欢Facebook的UI。 在Facebook确定了“Mobile first”这个移动方案后更深度的打磨被执行——不仅建立不同用途的应用同时也提供了多个具有类似功能和相互竞争的应用这些应用有时甚至不会共享相同的后台基础设施比如Messenger和WhatsAppInstagram和Facebook图片应用。Paper也是Facebook一个限制功能候补入口但是它表现得非常好。 在Mobile World Congress上Facebook CEO Mark Zuckerberg发表了自己的看法 他认为收购WhatsApp与Internet.org的愿景紧密相连 这个思想就是建立一组基础互联网的免费服务——“互联网的911”这可能是类似Facebook这样的社交网络服务、消息服务以及搜索服务等。将这些服务提供给那些支付得起却没有支付意识的用户引诱其上瘾让他们知道自己的重要性从而更愿意使用更多的收费服务。 这是个长久的目标这个舞台里有足够多的利益去追逐然而即时回报率却非常的低 Facebook正在这条道路上前行着 抛开这次交易不谈WhatsApp究竟是如何用32个工程师来支撑4.5亿的活跃用户下面一起探索…… 服务4.5亿用户的高可靠架构 信息源 需要注意的是 WhatsApp的整体架构并未公开这里仅仅是从不同信息源中获取不同的片段。Rick Reed的讲座主要分享了使用Erlang实现单服务器200万连接数虽然很有价值但是并不是整个应用架构。 Rick Reed 扩展到数百万并发连接数2012 PPTRick Reed Erlang Factory访谈Eugene Fooksman WhatsApp的Erlang使用访谈DLD14 关于WhatsAppJan Koum和David RowanYowsup以前是WhatsApp的一个开源API但是由于 弃用了DMCA当下已不可用但是同样可以说明WhatsApp的一些内部工作机制。相关文章中列出的一些信息。 一、 统计 这些统计是当下系统的一些数据更多针对数据存储、消息、meta-clustering以及新加入的BEAM/OTP补丁。 4.5亿的活跃用户并且是史上最快达到这个数字的公司32个工程师平均每人支撑1400万活跃用户每天收发跨7个平台的500亿消息平均每天注册用户过百万0广告开销800万投资数百个节点8000核心数百TB内存每秒Erlang消息超过7000万在2011年WhatsApp单服务器取得 100万个tcp会话同时还有内存和CPU剩余。在2012年 tcp会话发展到了200万。2013年WhatsApp 发表tweet声明70亿消息入站110亿消息出战即每天处理180亿消息伟大的2013 摘要不顾谷歌CEO阻拦WhatsApp最终以190亿美元的价格花落Facebook。能获如此天价与其月4.5亿的活跃用户是分不开的同样不可或缺的还有支撑每日数百亿消息的高可靠架构。 二、 平台 后端 ErlangFreeBSDYaws、lighttpdPHPBEAM定制补丁BEAM类似于Java的JVM但适用于Erlang定制XMPP 前端 7个客户端平台iPhone、Android、Blackberry、Nokia Symbian 360、Nokia S40、Windows Phone和一个未知的SQLite 三、 硬件 标准的面向用户服务器 Dual Westmere Hex-core24个逻辑CPU)100 GB RAM、SSDDual NIC公共面向用户的网络、私有的后端 /分布 四、 产品 聚焦消息传递。连接来自世界各地的用户忽视他们的地理位置无需支付高额费用创始人Jan Koum还经常提起1992年在世界各地与家里人联系是多么的难。隐私。由Jan Koum制定消息不会在服务器上储存聊天记录也不会储存目的就是不去了解用户隐私。不会保存用户姓名及性别聊天记录只存储在电话上。 五、通用 1. WhatsApp服务器基本上完全使用Erlang实现 做后端消息路由的服务器系统使用Erlang实现值得炫耀的是如此庞大数量的活跃用户只使用非常少的服务器来管理团队一致认为这很大程度上归功于Erlang。值得注意的是Facebook Chat就是在2009年使用Erlang开发他们弃用Erlang的原因是难以招聘到优秀的程序员。 2. WhatsApp服务器最早从Ejabberd开始 Ejabberd是个非常出名的开源Jabber服务器使用Erlang实现。最初选用它的原因是开放、广受开发者关注、易于开始以及Erlang在大型通信系统上的长期口碑。接下来的许多年一直从事Ejabberd的重写和修改包括从XMPP转换到内部开发协议、调整代码库以及重设计一些核心组件对Erlang VM做了大量的修改以获得高性能。 3. 为了应对每天500亿消息工作重心被放到可靠系统的打造上货币化对于我们来说还是件遥远的事情。 4. 系统的健康状况主要看队列的长度每个节点上消息队列的长度都会被一直监控超过预先设置的临界值则会发出提醒多个警报发生则标志着系统进入了下一个瓶颈。 5. 通过上传图片、音频、视频到一个HTTP服务器上来发送多媒体消息然后将链接与Base64编码的缩略图一起添加到内容如果可用。 6. 有些代码基本上每天都在变化通常情况下是一天几次当然峰值期间必须避开的。Erlang非常适用于将修改或者是新功能添加到产品热加载意味着无需重新启动就可以实现修改错误可以很快的得到解决同样通过热加载系统变得更加松耦合这可以让更新快速的发布。 7. WhatsApp使用了什么样的协议WhatsApp服务器池使用了SSL Socket在客户端重新连接对消息进行检索之前所有消息都会在服务器上排队。消息的成功检索会发回给WhatsApp服务器它将会被重新转发给原始发送者一旦客户端成功接收这条消息它就会在服务器存储中擦除。 8. WhatsApp注册程序的内部工作机制是什么样的WhasApp依赖电话IMEI号码来建立用户名/密码这点在最近已经修改。WhatsApp现在会让应用发送一个包含5位数Pin的一般请求然后给这个电话号码发送一个SMS这意味着WhatsApp客户端不再受限于某台手机。基于Pin的号码应用会从WhatsApp请求一个唯一的键这个键将作为未来的使用密码这同样意味着在新的设备上注册后会无效原有设备上的键。 9. 在Android上使用了Google的推送服务。 10. 在Android上有更多的客户。与Android打交道更让大家愉快开发者能够快速的基于一个特性构建原型并以最短的时间推出如果存在问题的话也可以快速修复iOS则不行。 六、单服务器上200万连接数的探索 1. 虽然用户增长是喜闻乐见的但是它同样意味着你得投入更多钱去购买硬件同时机器数量的增加也大幅增加了管理和运维复杂性。 2. 需要为流量的起伏做规划例子就是西班牙的足球比赛和墨西哥的地震。这些现实世界中发生的大事件造成了非常高的流量峰值因此需要有足够的剩余容量来应对流量高峰突发事件比如一场近期的足球比赛产生了当天35%的出站消息。 3. 初始的服务器负载是每个服务器20万并发连接。 预期将会添加大量的服务器来维持用户增加。服务器会因为负载的爆发而宕机网络及其它的故障也会发生。这时候需要做一些组件的解耦这样一来可以添加容量以应对峰值。目标是单服务器支撑百万连接数这个目标在只有20万连接数时已经制定。动态的容量规划以应对世界级事件、硬件故障及其它类型的小故障系统需要足够的弹性去应对高使用率和故障。 七、用来增强可扩展性的工具和技术 1. 编写系统活动报告工具wsar 记录整个系统状态包括OS状态、硬件状态、BEAM状态。这是为了便于从其他系统获取状态信息如虚拟内存。跟踪记录CPU利用率、系统整体利用率、用户时间、系统时间、中断时间、上下文切换、系统调用、traps、数据包发送和接收、所有进程队列中总消息数、繁忙的端口事件、通信速率、字节输入/输出、调度状态垃圾回收状态等。最初一分钟运行一次当系统运行变得困难时时间段将降为1秒钟一次因为一分钟无法运行的情况很少发生。了解所有系统运行情况需要非常细粒度的统计数据。 2. CPUpmcstat中的硬件性能计数器 通过查看CPU时间占用百分比可以了解正在执行的模拟器emulator周期时间。假如是16%说明只有16%的时间执行模拟代码所以即使你能消除所有Erlang代码的执行时间也只能节省总运行时间16%这意味着你应该将重点放在其他方面以提高系统的效率。 3. dtrace、 内核锁计数、fprof Dtrace是主要用于调试而不是提高性能。在FreeBSD上给BEAM打补丁加入CPU时间戳。写脚本创建所有进程的聚合视图查看哪些程序一直在占用系统资源。最大的胜利是给模拟器启用锁计数。 4. 一些问题 早期发现很多时间花在了垃圾回收程序上这个问题已经被解决了。发现一些网络堆栈的问题后来堆栈被调走了。大多数问题是关于模拟器的锁冲突主要体现在锁计数的输出上。 5. 度量 综合的工作负载这意味着从你自己的测试脚本中生成流量这对极限规模下面向用户系统调优没有价值。 对于用户表这样简单的接口效果不错生成接入然后尽可能快地读取。假如在一台服务器只支持100万连接那么整个系统将需要30台这样的主机去打开足够的IP端口生成足够多的连接然而这么多的开销仅仅可以测试一台服务器。对于测试200万个连接的服务器需要用到60个主机生成这样的规模真的很难。很难生成生产环境下的那种流量。在正常的工作量下还可以估算但在现实中看到的那些网络事件、世界事件这主要因为多平台上客户端的不同用户行为而且不同国家之间也有差异。 Tee’d 工作负载 采用正常生产环境流量然后把它放到一个单独的系统中。这对系统非常有用因为产生的副作用会受到限制。不想看到网络拥堵或者对用户造成影响。Erlang支持热加载所以可以在完整生产负荷下产生想法、编译在程序运行时加载变化而且能即时看到变化的好坏。添加旋钮动态调节生产加载观察它对性能的影响。观察特征输出比如CPU使用率、VM 使用率、监听队列溢出并调节旋钮看看系统会有怎样的反应。 真正的生产负载 最终测试。输入工作和输出工作都要测试。多次将服务器放入DNS中使其得到正常情况两倍或三倍的流量。TTL事务会产生问题因为客户端不会遵守DNS TTL而且这里还会有延迟因此无法快速做出反应以获得更多可以被处理的流量。IPFW. 将一台服务器的流量转移给另一台这样可以使主机的连接数达到理想的水平。内核如果因为有个Bug就奔溃是不行的。 6. 结果 开始时每个服务器有20万个并发连接。第一个瓶颈出现每台服务器42.5万个连接的时候。系统遇到了很多冲突工作停止了。安装调度器检测有多少有用的任务被停止、睡眠或回转了。在加载时它开始遇到睡眠锁整个系统只用35-45%的CPU利用率但调度程序的CPU利用率却达到了95%。第一轮修复使连接数超过100万个。 VM利用率为76%CPU利用率为73%BEAM模拟器利用率为45%与用户百分比很吻合这是件好事因为模拟器得和用户一样。通常CPU利用率并不是好的评估方法因为可能由于调度程序使用CPU导致系统看起来很忙。 一个月以后解决了瓶颈每个服务器连接数达到200万个。 BEAM利用率为80%与FreeBSD开始分页的情况接近。CPU利用率大致相同有两倍的连接数。调度程序遇到了冲突但运行得很好。 看来测试可以暂停了这时开始分析Erlang代码。 最初每个连接有两个Erlang进程消减为一个。用计时器完成一些工作。 在每个服务器有280万连接时达到顶峰 571k pkts/sec, 200k dist msgs/sec 做一些内存优化VM加载下降到70%。 尝试过将连接数增加到300万但没有成功。 当系统遇到故障时查看长消息队列单个消息队列或消息队列总和。将每个进程的消息队列统计添加到BEAM设备上。包括发送/接收了多少条消息以及发送/接收的速度。每10秒取样一次可以看到一个进程有60万条消息每15秒延迟出列4万条消息。预计完全出列时间是41秒。 7. 一些发现 Erlang BEAM 它们的补丁——可以具有接近线性的SMP可扩展性。在24路服务器上运行系统CPU利用率达到85%持续运行负载——它可以像这样运行一整天。 Erlang程序模型的证明。服务器使用的时间越长其积累长时间运行连接就越多但不是每个连接都很忙碌其中大多数是闲置的所以服务器使用时间越长能够处理的连接数也就越多。 冲突是最大的问题。 Erlang代码中的一些修复可以减少BEAM的冲突问题。向BEAM添加一些补丁。分区负载工作不需要频繁跨处理器运行。Time-of-day锁。每次从一个端口发送消息都会针对所有调度程序产生一个Time-of-day锁这意味着所有的CPU都会遇到同一个锁。优化计数器的使用移除bif计数器发现IO时间表算术增长。创建VM抖动使哈希表在不同的时间点重新分配改进使用几何分配表。通过你已经打开的端口添加写入文件以减少端口冲突。Mseg分配是所有分配器冲突的交点因此创建好每一个调度程序。获得一个连接时会有很多端口事务设置选项降低昂贵的端口交互。当消息队列积压太多的话垃圾回收会破坏系统稳定性。所以暂停 GC直到队列收缩。 避免一些不必要的麻烦。 从FreeBSD 9移植一个TSE计时器到FreeBSD 8。读取计时器开销更小快速时间比读取芯片还要便宜。从FreeBSD 9移植igp网络驱动程序因为多个队列会因为NIC锁定出问题。增加文件和套接字的数目。Pmcstat显示很多时间被用来在网络堆栈中查找PCB所以扩大哈希表让查询更快些。 BEAM补丁 之前提到过的设备补丁。植入设备调度程序用来获取使用信息、信息队列统计信息、sleep数、发送率、消息数等。可以在Erlang代码中使用procinfo任务管理实现但有100万的连接时这一过程会变得非常慢。统计数据收集非常高效所以它们可以在生产中运行。统计数据保持3个不同衰变间隔1秒、10秒和100秒。允许随时观测发生的问题。让锁计数为更大的异步线程计数工作。为调试锁计数器添加调试选项。 调试 设置低调度程序的唤醒值因为调度程序一旦进入睡眠就再也无法唤醒。mseg分配器优于malloc。每个调度程序每个实例都有个分配器。配置大的carrier而且还会越来越大。导致FreeBSD使用超级页降低 TLB thrash比率并为相同的CPU提高了吞吐量。以实时优先级运行BEAM这样其他的东西比如cron作业就不会打断调度程序。防止小故障导致重要用户通信的阻塞。打补丁下调spin数从而使调度程序不会spin。 Mnesia 相比erlang:now更喜欢os:timestamp。不使用事务用远程的备份并行复制每个表以提高吞吐量。 事实上还对许多地方进行了修改。 八、经验总结 1. 优化是件非常艰辛的事情也只有工程师去做。Rick在回顾大量的修改后使每个服务器连接数达到200更觉得头皮发麻。大量的工作包括编写工具、运行测试、增加补丁、把让人眼花缭乱的方法添加到堆栈的每一层、调试系统、寻找蛛丝马迹每一个细节都不能放过你需要努力让一切都在掌握之中。只有这样才能消除瓶颈提高性能以及最大程度地实现可扩展性。 2. 获取你需要的数据编写工具为工具添加补丁添加调控旋钮。扩展系统获取更多数据是Ken不懈的追求为了获取他们需要的数据需要不停地编写工具、脚本来管理和优化系统。为了数据不惜一切代价。 3. 度量消除瓶颈测试不断重复这样的过程。枯燥无聊但你需要这样做。 4. Erlang很给力Erlang继续证明其作为一个多用途、可靠、高性能平台的优良品质。虽然Erlang也需要大量的调整和修补这些工作难免会让人对Erlang产生质疑。 5. 破解病毒式代码获得利润。“病毒式”现在是优良品质的代名词就像WhatsApp那样只要你真得做到了那意味着你得到了很多很多钱。 6. 价值和员工数现在已经没有直接联系了。如今员工的数量并不能说明什么。先进的世界级电信基础设施使WhatsApp这样的应用程序成为可能。如果WhatsApp还需要做网络或手机等设备那可能根本就不会有WhatsApp这样的公司存在。功能强大、价格廉价的硬件和开源的软件也无疑使WhatsApp的成功事半功倍。换句话说WhatsApp的成功在于它在正确的地点、时间为正确的用户提供了正确的产品。 7. 能够重视用户想法是很了不起的。WhatsApp 将自身定位成一个简单的消息传递应用而不是游戏网络、广告网络或者已经面临消亡的照片网络这一点很重要。这样的定位使他们没有在应用中添加广告他们努力保持应用简单的同时添加新功能傻瓜型操作方式使WhatsApp适用于每一个用户。 8. 考虑到简单性有一些限制是允许的。你的身份被绑定到电话号码所以如果你更改了电话号码你的身份就失效了。这和一般的应用程序确实有点不太一样但却使整个系统在设计上变得更加简单了。 9. 年龄上的歧视。2009年因为年龄歧视WhatsApp创始人Brian Acton在Twitter和Facebook连一份工作都找不到那就让它们后悔去吧。 10. 先从简单的开始然后再深度定制。聊天刚推出时服务器端基于jabberd现在它已经被完全重写但那个确实是Erlang方向上的第一步。Erlang初次使用时就体现出的可扩展性、可靠性和可操作性这使得到了越来越广泛的应用。 11. 保持低的服务器数量。努力让服务器尽可能的少同时为短暂高峰期预留足够的上升空间。分析并优化直到达到收益递减点然后再部署更多的硬件。 12. 有目的地增加冗余服务器。这可以确保在公司放假时也能为用户提供不间断的服务员工可以享受假期而不用花时间修复过载问题。 13. 赚钱时也要考虑公司的成长。WhatsApp免费时成长是最快的早期每天都有1万次的下载量。然后转向付费时下载量下降至每天1000次。在年底增加了图片消息后他们就把按下载次数付费改成了按年收费。 14. 灵感总来自最意想不到的地方。忘记Skype用户名和密码的经历无疑给WhatsApp带来了灵感。 原文连接 The WhatsApp Architecture Facebook Bought For $19 Billion编译/仲浩 毛梦琪 审校/仲浩
http://www.yutouwan.com/news/83154/

相关文章:

  • 庆阳网站设计报价网站设计能出来什么
  • 张家港高端网站建设16素材网
  • 广东企业备案 网站建设方案书口碑好的移动网站建设
  • 折再返怎么 做网站网站建设工作的作用
  • seo百度网站排名研究中心关键词首页优化移动端网站宽度做多大
  • 国外免费搭建网站源码wordpress 主题 her
  • 快速建设企业网站vs网站开发建表怎么肩啊
  • 灵璧哪有做网站的建站工具介绍
  • dw旅游网站模板超级优化大师
  • 做网站好还是做app好广州网站优化公司
  • 自己做网站需要做啥青岛市黄岛区建设局网站
  • 怎么弄公司网站搜狗指数官网
  • 爱射影院网站建设中杭州营销型网站建设
  • 企业网站建站技术网站内容管理系统怎么用
  • 做网站注册哪类商标做视频免费模板下载网站
  • 网站的功能包括哪些内容晋城市网站建设
  • 用vs2015做网站网站开发人员结构
  • 电商网站免费设计甘肃网站建设哪家好
  • 做搜狗pc网站快速开平市建设工程站网站
  • 济南做网站哪里好宿迁房产查询网上查询系统
  • 制作网站 太原网推项目
  • 长春一大网站商城网站建设是+什么软件
  • 企业网站广告图片轮播代码江门市骏业纸制品有限公司
  • 西安咪豆网站建设公司做软件工资高还是网站
  • 中劳网做网站做视频网站需要什么资质
  • 网站开发西安做医药代表去什么招聘网站
  • 备案查询网站做一个个人主页的网站怎么做
  • wordpress 网站播放器wordpress首页添加视频教程
  • 公司网络营销策划书怎样优化网络
  • 英文淘宝网站建设国外用python做的网站