用户您好!请先登录!

Archives十一月 2019

限流设计与Java的实现示例

限流算法

  • 计数器限流固定窗口滑动窗口
  • 桶限流令牌桶漏桶

1. 计数器

计数器限流可以分为:

  • 固定窗口
  • 滑动窗口

1.1. 固定窗口

固定窗口计数器限流简单明了,就是限制单位之间内的请求数,比如设置QPS为10,那么从一开始的请求进入就计数,每次计数前判断是否到10,到达就拒绝请求,并保证这个计数周期是1秒,1秒后计数器清零。
以下是利用redis实现计数器分布式限流的实现,曾经在线上实践过的lua脚本:

local key = KEYS[1] 
local limit = tonumber(ARGV[1]) 
local refreshInterval = tonumber(ARGV[2]) 
local currentLimit = tonumber(redis.call('get', key) or '0') 
if currentLimit + 1 > limit then 
 return -1; 
else 
 redis.call('INCRBY', key, 1) 
 redis.call('EXPIRE', key, refreshInterval) 
 return limit - currentLimit - 1 
end

一个明显的弊端就是固定窗口计数器算法无法处理突刺流量,比如10QPS,1ms中来了10个请求,后续的999ms的所有请求都会被拒绝。

阅读更多

Three.js 那点事

随着人们对用户体验越来越重视,Web开发已经不满足于2D效果的实现,而把目标放到了更加炫酷的3D效果上。Three.js是用于实现web端3D效果的JS库,它的出现让3D应用开发更简单,本文将通过Three.js的介绍及示例带我们走进3D的奇妙世界。

1. Three.js相关概念

1.1 Three.JS

Three.JS是基于WebGL的Javascript开源框架,简言之,就是能够实现3D效果的JS库。

1.2 WebGL

WebGL是一种Javascript的3D图形接口,把JavaScript和OpenGL ES 2.0结合在一起。

1.3 OpenGL

OpenGL是开放式图形标准,跨编程语言、跨平台,Javascript、Java 、C、C++ 、 python 等都能支持OpenG ,OpenGL的Javascript实现就是WebGL,另外很多CAD制图软件都采用这种标准。OpenGL ES 2.0是OpenGL的子集,针对手机、游戏主机等嵌入式设备而设计。

阅读更多

从运维的角度看Linux服务器优化

1. linux服务器性能查看

1.1 cpu性能查看

1、查看物理cpu个数:

cat /proc/cpuinfo |grep "physical id"|sort|uniq|wc -l

2、查看每个物理cpu中的core个数:

cat /proc/cpuinfo |grep "cpu cores"|wc -l

3、逻辑cpu的个数:

cat /proc/cpuinfo |grep "processor"|wc -l

物理cpu个数*核数=逻辑cpu个数(不支持超线程技术的情况下)

1.2 内存查看

阅读更多

Java 9 到 13 的新特性

Java 9的新特性

java模块系统 (Java Platform Module System)。

模块系统的使用:

HTTP 2 客户端:HTTP/2标准是HTTP协议的最新版本,新的 HTTPClient API 支持 WebSocket 和 HTTP2 流以及服务器推送特性。

新的版本号格式:$MAJOR.$MINOR.$SECURITY.$PATCH

private instance methods:方法上可以使用@SafeVarargs注解。

  1. diamond语法与匿名内部类结合使用。
  2. 下划线_不能单独作为变量名使用。
  3. 支持私有接口方法(您可以使用diamond语法与匿名内部类结合使用)。

Javadoc

  • 简化Doclet API。
  • 支持生成HTML5格式。
  • 加入了搜索框,使用这个搜索框可以查询程序元素、标记的单词和文档中的短语。
  • 支持新的模块系统。

阅读更多

AIOps落地的关键点

随着系统效率和复杂程度的日益提高,我们用于承载服务的IT环境也变得异常复杂。许多企业在向微服务和容器化的迈进的过程中,给已有的应用进一步增加了大量的服务组件。那么如何管理和协调好各个组件之间的功能与关系,显然是我们需要面对和处理的巨大挑战。

对于大多数企业而言,他们的IT运营(IT Ops)团队往往只能疲于应付上述复杂局面,且很难获取到更多的实用信息与管理资源。而这恰恰是人工智能化IT运营(AIOps)一显身手的地方。通过由大数据、数据分析和机器学习等技术所提供高水准的定制服务,AIOps能够为当下流行的基础架构提供的全面、且深入的宝贵支持。

下面我们来一起了解一下,那些涉及到AIOps落地实践方面的关键知识点。

阅读更多

边缘计算开源平台

边缘计算中的边缘(edge)指的是网络边缘上的计算和存储资源,这里的网络边缘与数据中心相对,无论是从地理距离还是网络距离上来看都更贴近用户。作为一种新的计算范式,边缘计算将计算任务部署于接近数据产生源的网络边缘,利用边缘资源为用户提供大量服务或功能接口,大大减少上传至云数据中心的数据量,缓解网络带宽压力,同时可以更好地解决数据安全和隐私问题。

在边缘计算环境下,数据具有异构性且数据量较大,数据处理的应用程序具有多样性,不同应用程序所关联的计算任务又不尽相同,对于计算任务的管理具有较大的复杂性,而简单的中间件软件结构无法有效保证计算任务可行性、应用程序的可靠性以及资源利用的最大化。同时,面向不同应用或场景的边缘计算系统所要实现的功能有所差异性。因此,边缘计算平台对边缘计算领域的推广和发展有着重要的意义和影响。

阅读更多

用形象的思维了解边缘计算

云计算就像是天上的云,看得见摸不着,像章鱼的大脑。

边缘计算就类似于八爪鱼的那些小爪子,一个爪子就是一个小型的机房,靠近具体的实物。

什么是边缘计算

我们首先大脑里勾画一张图,就是一张人类大脑神经网络图,如果你还想不到,那直接看下图:

太形象了!什么是边缘计算?最有趣的解释没有之一

阅读更多

从构建角度看Gradle与Maven

Java世界中主要有三大构建工具:Ant、Maven和Gradle。经过几年的发展,Ant几乎销声匿迹、Maven也日薄西山,而Gradle的发展则如日中天。Maven的主要功能主要分为5点,分别是依赖管理系统、多模块构建、一致的项目结构、一致的构建模型和插件机制。我们可以从这五个方面来分析一下Gradle比起Maven的先进之处。

1. 依赖管理系统

Maven为Java世界引入了一个新的依赖管理系统。在Java世界中,可以用groupId、artifactId、version组成的Coordination(坐标)唯一标识一个依赖。任何基于Maven构建的项目自身也必须定义这三项属性,生成的包可以是Jar包,也可以是war包或者ear包。一个典型的依赖引用如下所示:

<dependency>
 <groupId>junit</groupId>
 <artifactId>junit</artifactId>
 <version>4.12</version>
 <scope>test</scope>
</dependency>
<dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-test</artifactId>
</dependency>

从上面可以看出当引用一个依赖时,version可以省略掉,这样在获取依赖时会选择最新的版本。而存储这些组件的仓库有远程仓库和本地仓库之分。远程仓库可以使用世界公用的central仓库,也可以使用Apache Nexus自建私有仓库;本地仓库则在本地计算机上。通过Maven安装目录下的settings.xml文件可以配置本地仓库的路径,以及采用的远程仓库的地址。

阅读更多

2020 交互设计趋势闲谈

【以下是网易设计师阿洋对2020年交互设计趋势的展望】

01. 模态展示

在 iOS 13 中,模态面板采用了新的卡片样式,它占据了屏幕90%的面积。模态面板拉起时,原有的页面会有一个纵深效果,以灰色状态显示,防止用户和它们发生交互。模态面板可以通过滑动操作下拉关闭,适用于单手操作,专为大屏服务。

2020年最值得关注的9大交互设计趋势

在系统邮件、日历、通讯录、Apple Music、信息Animoji等自带应用中,模态面板得到了广泛应用。

阅读更多

国内流行的交互设计七定律

【虽是老文,却是经典】

为什么风靡一时的「汉堡包导航」在APP上不再受欢迎?

前言

”交互设计7大定律“应该是各种交互原则中大家都比较耳熟能详的名字了,但是这种说法是出自哪里呢?

“交互设计7大定律”最早出自12年极客公园的一篇文章,虽然优设和人人都是产品经理都有转载,不过原文已经删除了;在google上查找英文,也没有搜索到相关的概念。

阅读更多

交互设计的常用模型

体系化的设计方法不仅能更好的指导设计师做设计;另一个方面,经过设计方法包装后的设计,能让设计师更坦然面对来自各方的质疑,更专业的讲述自己的设计依据。在做不同菜肴的时候,我们需要不同的菜谱来指引;而在不同的设计阶段,设计师也需要不同的设计模型/方法,让我们更灵活的做设计分析与输出。

下面从接到项目需求 > 体验迭代优化阶段,笔者将为大家详细讲解以下 5 种设计模型,并配出具体实践的案例,希望对大家有所启发。

交互设计常识—设计常用模型分析(一)

阅读更多

SD-WAN背后的安全问题

SD-WAN以成本低廉、创建灵活等优势正在快速崛起,蚕食着MPLS部分市场份额。尽管SD-WAN在技术领域和资本市场备受追捧,然而很多企业依然对于SD-WAN的安全性心存顾虑。

​2019年,SD-WAN已经成为企业网络运营商和云服务商最热门的话题之一。据Gartner预测中,到2020年,SD-WAN设备销售额将达到12.4亿美元;此外,IDC也预测,到2021年复合年增长率将增长69%,达到80亿美元以上。

从长期来看,SD-WAN广阔的市场前景不容置疑,但是新兴技术的落地往往需要很长一段时间,技术概念的热捧与市场成熟度之间还要跨过很大的鸿沟。

对于新兴的SD-WAN市场而言,面临的早期挑战之一就是解决安全问题,其中包括客户对这种新服务产品安全性的看法。

据Gartner调查,“72%的受访者表示安全是他们使用广域网时最关心的问题,其次才是网络性能和成本。”

阅读更多

百度分布式ID生成器:UidGenerator

UidGenerator是百度开源的Java语言实现,基于Snowflake算法的唯一ID生成器。而且,它非常适合虚拟环境,比如:Docker。另外,它通过消费未来时间克服了雪花算法的并发限制。UidGenerator提前生成ID并缓存在RingBuffer中。 压测结果显示,单个实例的QPS能超过6000,000。(另外,也可参考美团的雪花算法开源实现Leaf)

依赖环境:

  • JDK8+
  • MySQL(用于分配WorkerId)

1. snowflake

由下图可知,雪花算法的几个核心组成部分:

  • 1位sign标识位;
  • 41位时间戳;
  • 10位workId(数据中心+工作机器,可以其他组成方式);
  • 12位自增序列;
时钟回拨问题?百度开源的分布式唯一ID生成器UidGenerator出手了

阅读更多

几种常用的算法简析

1. 分治算法

1.1 基本概念

在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)……

任何一个可以用计算机求解的问题所需的计算时间都与其规模有关。问题的规模越小,越容易直接求解,解题所需的计算时间也越少。例如,对于n个元素的排序问题,当n=1时,不需任何计算。n=2时,只要作一次比较即可排好序。n=3时只要作3次比较即可,…。而当n较大时,问题就不那么容易处理了。要想直接解决一个规模较大的问题,有时是相当困难的。

阅读更多

顶级的开源云管理平台

云管理平台(CMP)是具有集成工具的综合软件套件,企业可以使用它来监控和控制云计算资源。市场上有许多CMP,包括开源的和专有的。这里为大家推荐9款市场上顶级的开源云平台。

对于任何基于云的全面部署,用户面临的问题包括维护在线迁移的所有数据的完整性,可用性和安全性等。随着企业IT运营开始将功能和资源扩展到云中,企业现在希望通过以下方式管理云资源,比如对现有IT环境具有相同的政策,程序,指导和愿景。

解决基于云实施产生的所有问题的唯一解决方案是云管理平台(CMP)。它为编排和自动化提供了丰富的功能,还可以跨多个公有和私有云以及虚拟服务器和裸机服务器进行操作、监控、管理,治理和成本优化。

有各种各样的工具可以应对这些挑战,并帮助公司有效地在云中操作应用程序和服务。供应商提供了多种云管理工具,这些工具使IT组织能够构建,购买,管理,监控,跟踪和优化其云资源。借助这些工具,组织可以节省时间和精力,同时让IT员工专注于更具战略意义的目标。这些工具还有助于监控用户与云基础架构的交互以及管理资源分配。

阅读更多

继续扯一扯秒杀系统设计

秒杀系统的关键点:

秒杀系统其实主要解决2个问题,一个是并发读,一个是并发写。整体概况为“稳、准、快”

  • 高性能。 秒杀涉及大量的并发读和并发写,因此支持高并发访问这点非常关键。本文将从设计数据的动静分离方案、热点的发现与隔离、请求的削峰与分层过滤、服务端的极致优化这 4 个方面重点介绍。
  • 一致性。 秒杀中商品减库存的实现方式同样关键。可想而知,有限数量的商品在同一时刻被很多倍的请求同时来减库存,减库存又分为“拍下减库存”“付款减库存”以及预扣等几种,在大并发更新的过程中都要保证数据的准确性,其难度可想而知。
  • 高可用。 虽然介绍了很多极致的优化思路,但现实中总难免出现一些我们考虑不到的情况,所以要保证系统的高可用和正确性,我们还要设计一个 PlanB 来兜底,以便在最坏情况发生时仍然能够从容应对。

 

1. 设计秒杀系统时应该注意的5个架构原则

总结来说就是“4 要 1 不要”

  • 数据要尽量少。 所谓“数据要尽量少”,请求的数据包括请求包体和返回包体,字段精简。不管是请求数据还是返回数据都需要服务器做处理,而服务器在写网络时通常都要做压缩和字符编码,这些都非常消耗 CPU,所以减少传输的数据量可以显著减少 CPU 的使用。数据库也容易成为一个瓶颈,所以和数据库打交道越少越好,数据越简单、越小则越好。
  • 请求数要尽量少。 这里的请求数包括了页面依赖的 CSS/JavaScript、图片、加载这些文件都需要建立连接要做三次握手,另外,如果不同请求的域名不一样的话,还涉及这些域名的 DNS 解析,可能会耗时更久。所以,减少请求数可以显著减少以上这些因素导致的资源消耗。

阅读更多

CNCF毕业的分布式追踪系统Jaeger拓扑生成原理

随着互联网架构的流行,越来越多的系统开始走向分布式化、微服务化。如何快速发现和定位分布式系统下的各类性能瓶颈成为了摆在开发者面前的难题。借助分布式追踪系统的调用链路还原能力,开发者可以完整地了解一次请求的执行过程和详细信息。但要真正分析出系统的性能瓶颈往往还需要链路拓扑、应用依赖分析等工具的支持。这些工具使用起来虽然简单,但其背后的原理是什么?本文将带您一起探索。

Jaeger 作为从 CNCF 毕业的第七个项目,已经成为了云原生架构下分布式追踪系统的第一选择。本文将以 Jaeger 为例,介绍基于 Tracing 数据的拓扑关系生成原理,文中使用的版本为1.14。

阅读更多

深度学习中的各种卷积

如果你听说过深度学习中不同种类的卷积(比如 2D / 3D / 1×1 /转置/扩张(Atrous)/空间可分/深度可分/平展/分组/混洗分组卷积),并且搞不清楚它们究竟是什么意思,那么这篇文章就是为你写的,能帮你理解它们实际的工作方式。

在这篇文章中,我会归纳总结深度学习中常用的几种卷积,并会试图用一种每个人都能理解的方式解释它们。

1. 卷积与互相关

在信号处理、图像处理和其它工程/科学领域,卷积都是一种使用广泛的技术。在深度学习领域,CNN这种模型架构就得名于这种技术。但是,深度学习领域的卷积本质上是信号/图像处理领域内的互相关(cross-correlation)。这两种操作之间存在细微的差别。

无需太过深入细节,我们就能看到这个差别。在信号/图像处理领域,卷积的定义是:

一文读懂深度学习中的各种卷积

阅读更多

面向ToB企业的数据分析

很多同学很困惑:B2B类分析该怎么做!!!网上到处都是零售电商的例子,可这都是B2C类业务啊。当然还有一些同学连B2B和B2C都分不清楚,只是感觉到:我这个数据很奇怪,该怎么分析?今天系统解答一下。

B2B和B2C的直观区别

1. 一个典型B2C场景:

阿里数据总监手把手教学:如何面向企业做一次有价值的数据分析

阅读更多

SaaS销售运营图解

我们在做应用平台业务的时候,特别要了解的技能就是解构某一个复杂的业务流程。无论它有多复杂,多陌生,只要抓住业务流程中的角色、指标和数据这三样东西,就能够大体建立一个合理的数字化管理框架。

  1. 角色是指参与这个业务流程的用户,例如销售经理、项目经理;
  2. 指标是指在管理上要求达到的量化目标,例如获客成本,转化率;
  3. 数据是指在业务流程中需要采集、记录、计算和汇总报告的对象,例如客户、订单、发票等;

这里用一张信息图来解构SaaS业务在销售运营环节中的三要素。它应该对本行业用户有用,其他行业也可借鉴这个方式来梳理自己的业务环节,从而建立对应的数字化管理框架。

当然,除了这三个要素以外,还包括流程、视图、报表、自动化,以及与其他业务流程的对接等要素,在骨架基础上,形成信息系统的血脉。

阅读更多

简单了解一下物联网

物联网的起源有多个不同的说法,一是1990年施乐在线可乐售卖机。1995比尔盖茨在著作《未来之路》中提到物联网。正式提出有说是Peter T. Lewis于1985年提出,也有说是麻省理工大学的Kevin Ash-ton教授于1999年提出的,“万物皆可通过网络连接”。

现在比较通用的定义是:将可感知设备、可独立寻址的物体进行互通互联的网络。和以前互联网一样,接入的设备必须是可以寻址,才能具备唯一的身份,发起与其它设备的对话。

物联网与互联网的关系

物联网也是一种链接网络,而且也具备大量原来互联网、移动互联网的特点,通用的MQTT协议也运行于互联网的TCP/IP的基础之上。因此,物联网是基于互联网发展和拓展而来的互联网络,其简化的高层架构关系如下:

物联网未来应用方向

阅读更多

网络安全的常见攻击手段

网络攻击(Cyber Attacks,也称赛博攻击)是指针对计算机信息系统、基础设施、计算机网络或个人计算机设备的,任何类型的进攻动作。对于计算机和计算机网络来说,破坏、揭露、修改、使软件或服务失去功能、在没有得到授权的情况下偷取或访问任何一计算机的数据,都会被视为于计算机和计算机网络中的攻击。

1. 暴力破解

暴力破解是一种针对于密码或身份认证的破译方法,即穷举尝试各种可能,找到突破身份认证的一种攻击方法。

暴力破解是一把双刃剑,一方面能够被恶意者使用,另一方面在计算机安全性方面却非常重要,它用于检查系统、网络或应用程序中使用的弱密码。

暴力破解的原理就是使用攻击者自己的用户名和密码字典,一个一个去枚举,尝试是否能够登录。因为理论上来说,只要字典足够庞大,枚举总是能够成功的!

但实际发送的数据并不像想象中的那样简单——“ 每次只向服务器发送用户名和密码字段即可!”,实际情况是每次发送的数据都必须要封装成完整的 HTTP 数据包才能被服务器接收。但是你不可能一个一个去手动构造数据包,所以在实施暴力破解之前,我们只需要先去获取构造HTTP包所需要的参数,然后扔给暴力破解软件构造工具数据包,然后实施攻击就可以了。

阅读更多


1 2 3