首页 文章 精选 留言 我的

精选列表

搜索[页面布局],共10000篇文章
优秀的个人博客,低调大师

物联网市场潜力巨大,中国移动加强布局

在个人移动通信市场占比高达64%的中国移动,2016年中国国际信息通信展上并没有将个人业务板块作为最为突出的重点——面向行业用户的信息化展示占据了展区的重要位置;在5G展区,中国移动带来了VR眼镜、智能机器人等,吸引了众多观众排队体验。而个人业务部分,中国移动只突出了和飞信、视频彩铃、高清语音等业务。 通信展是一扇透视企业战略的窗口,从本届通信展上展示内容的变化,可以发现中国移动在巩固个人移动通信市场优势的基础上,正在面向未来的万物互联时代,向500亿连接的物联网市场进发。 物联网市场潜力巨大 统计数字显示,目前全球共有50亿个连接,各方预测的数据是2020年全球将有500亿个连接。在中国相应的数字分别为10亿个和100亿个。市场空间相当诱人,因此在今年6月举行的MWC世界移动大会上,中国移动就提出要把握万物互联时代特征,全面实施大连接战略,推动公司进一步做强、做优、做大,成为数字化创新的全球领先运营商。 在行业信息化展区,中国移动展示了其在政务、能源、交通、教育、医疗等行业的信息化产品能力、解决方案和典型案例。其中,中国移动搭建的中小企业云、智慧农业云平台、新农合平台、政务综合信息化服务,为精准扶贫、支持“双创”、医疗公平等提供了有力的信息化支撑。 值得一提的是,这些方案已经在现实中发挥了重要作用。其中,4G图传等业务在抗洪救灾中大显身手。今年7~8月,我国南方多省普降大雨、洪灾肆虐,中国移动利用4G+网络和信息技术优势,使用4G图传、和对讲、云MAS等业务,为安徽、湖北、江苏、四川、广西等省的抗洪救灾工作组织、灾情通报、前线指挥、视频实时传输、后台调度等提供信息化支撑,成为保障抗洪抢险工作顺利开展的通信“利器”。 另外一个受人关注的案例,是中国移动为新能源汽车充电桩运营者提供高速、可靠、安全的数据传输保障方案。随着新能源汽车的逐渐普及,中国移动采用4G+物联网卡等技术,帮助智能充电桩运营者更好地开展数据分析和高效管理,推动传统能源行业向智慧能源升级。截至今年6月底,中国移动已在23个省为该项业务发放1.5万张物联网卡。 在物联网市场,中国移动目前已经获得了8000万个连接,据悉,其目标是在今年年底将这一数字增加到1亿个。 4G+和5G破解网络瓶颈 物联网的发展离不开网络的支撑,尤其是一些对于带宽、时延要求较高的业务,目前的网络难以满足,因此做好面向未来的网络演进,是成功拓展物联网市场的基础。 据悉,近年来中国移动在完善4G网络覆盖的同时,借助载波聚合等新技术,大力推进4G+建设,使得4G+下行峰值速率超过300Mbit/s,是4G网速的3倍,为用户提供了更加高速流畅的网络体验,在一定程度上缓解了网络瓶颈。 业界公认,速率可达10Gbit/s以上、时延在1毫秒以内的5G网络将能够为物联网提供绝佳的基础设施。在这一领域,中国移动早已起步。为推进5G发展,在2016年2月巴塞罗那世界移动通信大会期间,中国移动推出了5G联合创新中心,同时联创中心还积极开展与GTI、GSMA、NGMN等国际组织的合作,在全球推广联合创新的成果。 依托5G联合创新中心,中国移动正在积极参与由中国IMT-2020推进组牵头组织的5G试验,推进5G候选技术验证、标准制定、产业链构建和产品成熟,满足2020年5G商用部署的需求。 在本次展会上,中国移动对ITU定义的5G三大类典型应用场景,包括增强型移动宽带(eMBB)、连接物联网(mMTC)、低时延及高可靠通信(uRLLC)均有展示,为观众提供了全新体验,也扣响了通往未来万物互联市场的大门。 本文转自d1net(转载)

优秀的个人博客,低调大师

Docker 收购 Tutum,进一步完善其生态布局

Docker今天宣布正在收购Tutum。Tutum是一个专注于Docker容器部署和管理的云服务,并可以支持云上或者本地部署的任何环境。 Docker公司没有透露有关收购价格的信息。 Docker公司一直把容器创建、交付和运行作为自己的重点。人们有时也把编程中这种分离的砌砖石称作微服务(micro-services)。在今天收购之后,Docker真正的填补上了自己的第三驾马车,即容器的运行,在这之前,这事几乎全是丢给程序员让他们自己去折腾的。 容器运行通常需要自己编写脚本来对容器进行部署和管理,而这些脚本费时费力,通常需要花费几小时甚至几天。从某种意义上讲,这过程有损开发和运维 团队的速度和敏捷性,而Docker本该在这些方面起到积极作用才对。Docker的产品SVP Scott Johnston解释道。 收购了Tutum之后,Docker就能以一个更加完整的面貌呈现到客户面前,这一点随着产品的日加成熟重要性也越高。 Johnston说,“企业级的IT市场需要的是拿来即用的产品,这样他们就能专注于应用开发,而不是不断去维护自己编写的脚本,和伴随着版本升级不可避免的重写。Tutum将会承担这维护部分的工作。” Tutum是一个云服务,一个自底开发而来的Docker工具。它能让容器内部更加可见,并可在需要的时候能让团队对容器进行创建、启动、停止和重新部署等操作。它也提供了控制面板,方便查看所有管理的容器。 Tutum创立于2013年10月,那个时候Docker连个产品的样子都还没有,但是它的两个创始人Borja Burgos和Fernando Mayo,在大家还不知道Docker是何方神圣的时候就已经洞见了Docker的光明的未来。 在Burgos的口中,Docker是一个十年难遇的革命性的技术,于是他跟伙伴一起跳上追梦的马车,将自己的未来托付给了Docker。这是一场梦想的豪赌,最后终于赢得盆满钵满。 “我们一起成长,一路上学会了如何为一个共同的目标相互协作。这(收购)是我们(当时)要走的下一步。今天的结果其实很自然,因为这些工具在一起协作运行的结果令人相当满意,” Burgos说。 尽管Tutum在Docker社区已经很有名气,用户已经蹿升到两万四千人,但是作为一个十一人的团队,他们经常遇到说服大型企业客户的困难,很难让他们相信自己有完成交付的如意神针。而加入了Docker的大家庭后,应该能对消除客户的这种担忧有所帮助。 Johnston说,Docker在不断的评估各种方案:是否需要自己来做,是否需要收购,是否可以寻求合作伙伴关系。Tutum看起来就像一块 石头,能很好地填补Docker这面墙上的一个巨大的洞口,加之他们已经有广大高满意度的客户基础,被证实有能力可以进行伸缩,它们的文化与Docker 十分契合,这些让它们成为收购的目标。 而作为收购的一部分,Tutum的11名员工,将会在收购结束后搬到旧金山加入Docker的团队,他们现在工作的地点是纽约和马德里。 Tutum从创立到现在累计募集到了272万美元的投资。最近的一次融资来自于去年八月种子轮中的265万美元。而Docker到现在累计融资为1.62亿美元。 原文链接:Docker Fills Big Hole With Tutum Acquisition (翻译:钟最龙) 文章转载自 开源中国社区[https://www.oschina.net]

优秀的个人博客,低调大师

页面查询多项数据组合的线程池设计 | 京东云技术团队

背景 我们应对并发场景时一般会采用下面方式去预估线程池的线程数量,比如QPS需求是1000,平均每个任务需要执行的时间是t秒,那么我们需要的线程数是t * 1000。 但是在一些情况下,这个t是不好估算的,即便是估算出来了,在实际的线程环境上也需要进行验证和微调。比如在本文所阐述分页查询的数据项组合场景中。 1、数据组合依赖不同的上游接接口, 它们的响应时间参差不齐,甚至差距还非常大。有些接口支持批量查询而另一些则不支持批量查询。有些接口因为性能问题还需要考虑降级和平滑方案。 2、为了提升用户体验,这里的查询设计了动态列,因此每一次访问所需要组合的数据项和数量也是不同的。 因此这里如果需要估算出一个合理的t是不太现实的。 方案 一种可动态调节的策略,根据监控的反馈对线程池进行微调。整体设计分为装配逻辑和线程池封装设计。 1、装配逻辑 查询结果,拆分分片(水平拆分),并行装配(垂直拆分),获得装配项列表(动态列), 并行装配每一项。  2、线程池封装 可调节的核心线程数、最大线程数、线程保持时间,队列大小,提交任务重试等待时间,提交任务重试次数。 固定异常拒绝策略。 调节参数: 字段 名称 说明 corePoolSize 核心线程数 参考线程池定义 maximumPoolSize 最大线程数 参考线程池定义 keepAliveTime 线程存活时间 参考线程池定义 queueSize 队列长度 参考线程池定义 resubmitSleepMillis 提交任务重试等待时间 添加任务被拒绝后重试时的等待时间 resubmitTimes 提交任务重试次数 添加任务被拒绝后重试添加的最大次数 @Data private static class PoolPolicy { /** 核心线程数 */ private Integer corePoolSize; /** 最大线程数 */ private Integer maximumPoolSize; /** 线程存活时间 */ private Integer keepAliveTime; /** 队列容量 */ private Integer queueSize; /** 重试等待时间 */ private Long resubmitSleepMillis; /** 重试次数 */ private Integer resubmitTimes; } 创建线程池: 线程池的创建考虑了动态的需求,满足根据压测结果进行微调的要求。首先缓存旧的线程池后再创建新的线程,当新的线程池创建成功后再去关闭旧的线程池。保证在这个替换过程中不影响正在执行的业务。线程池使用了中断策略,用户可以及时感知到系统繁忙并保证了系统资源占用的安全。 public void reloadThreadPool(PoolPolicy poolPolicy) { if (poolPolicy == null) { throw new RuntimeException("The thread pool policy cannot be empty."); } if (poolPolicy.getCorePoolSize() == null) { poolPolicy.setCorePoolSize(0); } if (poolPolicy.getMaximumPoolSize() == null) { poolPolicy.setMaximumPoolSize(Runtime.getRuntime().availableProcessors() + 1); } if (poolPolicy.getKeepAliveTime() == null) { poolPolicy.setKeepAliveTime(60); } if (poolPolicy.getQueueSize() == null) { poolPolicy.setQueueSize(Runtime.getRuntime().availableProcessors() + 1); } if (poolPolicy.getResubmitSleepMillis() == null) { poolPolicy.setResubmitSleepMillis(200L); } if (poolPolicy.getResubmitTimes() == null) { poolPolicy.setResubmitTimes(5); } // - 线程池策略没有变化直接返回已有线程池。 ExecutorService original = this.executorService; this.executorService = new ThreadPoolExecutor( poolPolicy.getCorePoolSize(), poolPolicy.getMaximumPoolSize(), poolPolicy.getKeepAliveTime(), TimeUnit.SECONDS, new ArrayBlockingQueue<>(poolPolicy.getQueueSize()), new ThreadFactoryBuilder().setNameFormat(threadNamePrefix + "-%d").setDaemon(true).build(), new ThreadPoolExecutor.AbortPolicy()); this.poolPolicy = poolPolicy; if (original != null) { original.shutdownNow(); } } 任务提交: 线程池封装对象中使用的线程池拒绝策略是AbortPolicy,因此在线程数和阻塞队列到达上限后会触发异常。另外在这里为了保证提交的成功率利用重试策略实现了一定程度的延迟处理,具体场景中可以结合业务特点进行适当的调节和配置。 public <T> Future<T> submit(Callable<T> task) { RejectedExecutionException exception = null; Future<T> future = null; for (int i = 0; i < this.poolPolicy.getResubmitTimes(); i++) { try { // - 添加任务 future = this.executorService.submit(task); exception = null; break; } catch (RejectedExecutionException e) { exception = e; this.theadSleep(this.poolPolicy.getResubmitSleepMillis()); } } if (exception != null) { throw exception; } return future; } 监控: 1、submit提交的监控 见代码中的「监控点①」,在submit方法中添加监控点,监控key的需要添线程池封装对象的线程名称前缀,用于区分具体的线程池对象。 「监控点①」用于监控添加任务的动作是否正常,以便对线程池对象及策略参数进行微调。 public <T> Future<T> submit(Callable<T> task) { // - 监控点① CallerInfo callerInfo = Profiler.registerInfo(UmpConstant.THREAD_POOL_WAP + threadNamePrefix, UmpConstant.APP_NAME, UmpConstant.UMP_DISABLE_HEART, UmpConstant.UMP_ENABLE_TP); RejectedExecutionException exception = null; Future<T> future = null; for (int i = 0; i < this.poolPolicy.getResubmitTimes(); i++) { try { // - 添加任务 future = this.executorService.submit(task); exception = null; break; } catch (RejectedExecutionException e) { exception = e; this.theadSleep(this.poolPolicy.getResubmitSleepMillis()); } } if (exception != null) { // - 监控点① Profiler.functionError(callerInfo); throw exception; } // - 监控点① Profiler.registerInfoEnd(callerInfo); return future; } 2、线程池并行任务 见代码的「监控点②」,分别在添加任务和任务完成后。 「监控点②」实时统计在线程中执行的总任务数量,用于评估线程池的任务的数量的满载水平。 /** 任务并行数量统计 */ private AtomicInteger parallelTaskCount = new AtomicInteger(0); public <T> Future<T> submit(Callable<T> task) { RejectedExecutionException exception = null; Future<T> future = null; for (int i = 0; i < this.poolPolicy.getResubmitTimes(); i++) { try { // - 添加任务 future = this.executorService.submit(()-> { T rst = task.call(); // - 监控点② log.info("{} - Parallel task count {}", this.threadNamePrefix, this.parallelTaskCount.decrementAndGet()); return rst; }); // - 监控点② log.info("{} + Parallel task count {}", this.threadNamePrefix, this.parallelTaskCount.incrementAndGet()); exception = null; break; } catch (RejectedExecutionException e) { exception = e; this.theadSleep(this.poolPolicy.getResubmitSleepMillis()); } } if (exception != null) { throw exception; } return future; } 3、调节 线程池封装对象策略的调节时机 1)上线前基于流量预估的压测阶段; 2)上线后跟进监控数据和线程池中任务的满载水平进行人工微调,也可以通过JOB在指定的时间自动调整; 3)大促前依据往期大促峰值来调高相关参数。 线程池封装对象策略的调节经验 1)访问时长要求较低时,我们可以考虑调小线程数和阻塞队列,适当调大提交任务重试等待时间和次数,以便降低资源占用。 2)访问时长要求较高时,就需要调大线程数并保证相对较小的阻塞队列,调小提交任务的重试等待时间和次数甚至分别调成0和1(即关闭重试提交逻辑)。 作者:京东零售 王文明 来源:京东云开发者社区 转载请注明来源

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册