首页 文章 精选 留言 我的

精选列表

搜索[思维链],共10003篇文章
优秀的个人博客,低调大师

【思维方式】同是ZooKeeper,你和架构师的理解差在哪里?

##前言 提到ZooKeeper,相信大家都不会陌生。Dubbo,Kafka,Hadoop等等项目里都能看到它的影子。但是你真的了解 ZooKeeper 吗?如果面试官让你给他讲讲 ZooKeeper 是个什么东西,你能回答到什么地步呢? 而且,同样是ZooKeeper,一线架构师和你的理解又有哪些不同呢? 如何从一个问题及思考方式了解架构的本质? 如何剖析ZooKeeper为什么这么设计? ZooKeeper到底能干嘛? 如果你已经工作了2-3年,有没有思考过上述3个问题? ——如果有,你的答案会是? ——如果没有,为什么? 下面,我主要介绍一下ZooKeeper是什么以及ZooKeeper的作用,前面两个问题,我会在文末给出答案。 一、ZooKeeper是什么 ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。 官网:http://zookeeper.apache.org/ 源码:https://github.com/apache/zookeeper ZooKeeper翻译成中文是“动物园管理员”,至于为什么这么翻译,感兴趣的话可以去看看《从Paxos到Zookeeper 》 ,本文中很多的名词介绍也来自本书。 三、ZooKeeper的特性 顺序一致性,从同一个客户端发起的事务请求,最终将会严格地按照其发起顺序被应用到Zookeeper中去。 原子性,所有事务请求的处理结果在整个集群中所有机器上的应用情况是一致的,即整个集群要么都成功应用了某个事务,要么都没有应用。 单一视图,无论客户端连接的是哪个 Zookeeper 服务器,其看到的服务端数据模型都是一致的。 可靠性,一旦服务端成功地应用了一个事务,并完成对客户端的响应,那么该事务所引起的服务端状态变更将会一直被保留,除非有另一个事务对其进行了变更。 实时性,Zookeeper 保证在一定的时间段内,客户端最终一定能够从服务端上读取到最新的数据状态。 四、ZooKeeper的设计目标 简单的数据结构 Zookeeper 使得分布式程序能够通过一个共享的树形结构的名字空间来进行相互协调,即Zookeeper 服务器内存中的数据模型由一系列被称为ZNode的数据节点组成,Zookeeper 将全量的数据存储在内存中,以此来提高服务器吞吐、减少延迟的目的。 可以构建集群 Zookeeper 集群通常由一组机器构成,组成 Zookeeper 集群的而每台机器都会在内存中维护当前服务器状态,并且每台机器之间都相互通信。 顺序访问 对于来自客户端的每个更新请求,Zookeeper 都会分配一个全局唯一的递增编号,这个编号反映了所有事务操作的先后顺序。 高性能 Zookeeper 和Redis一样全量数据存储在内存中,100%读请求压测QPS 12-13W。 五、关于 ZooKeeper 的一些重要概念 5.1 Zookeeper 集群: Zookeeper 是一个由多个 server 组成的集群,一个 leader,多个 follower。(这个不同于我们常见的Master/Slave模式)leader 为客户端服务器提供读写服务,除了leader外其他的机器只能提供读服务。 每个 server 保存一份数据副本全数据一致,分布式读 follower,写由 leader 实施更新请求转发,由 leader 实施更新请求顺序进行,来自同一个 client 的更新请求按其发送顺序依次执行数据更新原子性,一次数据更新要么成功,要么失败。全局唯一数据视图,client 无论连接到哪个 server,数据视图都是一致的实时性,在一定事件范围内,client 能读到最新数据。 5.2 集群角色 Leader:是整个 Zookeeper 集群工作机制中的核心 。Leader 作为整个 ZooKeeper 集群的主节点,负责响应所有对 ZooKeeper 状态变更的请求。 主要工作: 事务请求的唯一调度和处理,保障集群处理事务的顺序性。 集群内各服务器的调度者。 Leader 选举是 Zookeeper 最重要的技术之一,也是保障分布式数据一致性的关键所在。我们以三台机器为例,在服务器集群初始化阶段,当有一台服务器Server1启动时候是无法完成选举的,当第二台机器 Server2 启动后两台机器能互相通信,每台机器都试图找到一个leader,于是便进入了 leader 选举流程. 每个 server 发出一个投票 投票的最基本元素是(SID-服务器id,ZXID-事物id) 接受来自各个服务器的投票 处理投票 优先检查 ZXID(数据越新ZXID越大),ZXID比较大的作为leader,ZXID一样的情况下比较SID 统计投票 这里有个过半的概念,大于集群机器数量的一半,即大于或等于(n/2+1),我们这里的由三台,大于等于2即为达到“过半”的要求。 这里也有引申到为什么 Zookeeper 集群推荐是单数。 集群数量 至少正常运行数量 允许挂掉的数量 2 2的半数为1,半数以上最少为2 0 3 3的半数为1.5,半数以上最少为2 1 4 4的半数为2,半数以上最少为3 1 5 5的半数为2.5,半数以上最少为3 2 6 6的半数为3,半数以上最少为4 2 通过以上可以发现,3台服务器和4台服务器都最多允许1台服务器挂掉,5台服务器和6台服务器都最多允许2台服务器挂掉,明显4台服务器成本高于3台服务器成本,6台服务器成本高于5服务器成本。这是由于半数以上投票通过决定的。 改变服务器状态 一旦确定了 leader,服务器就会更改自己的状态,且一半不会再发生变化,比如新机器加入集群、非 leader 挂掉一台。 Follower:是 Zookeeper 集群状态的跟随者。他的逻辑就比较简单。除了响应本服务器上的读请求外,follower 还要处理leader 的提议,并在 leader 提交该提议时在本地也进行提交。另外需要注意的是,leader 和 follower 构成ZooKeeper 集群的法定人数,也就是说,只有他们才参与新 leader的选举、响应 leader 的提议。 Observer:服务器充当一个观察者的角色。如果 ZooKeeper 集群的读取负载很高,或者客户端多到跨机房,可以设置一些 observer 服务器,以提高读取的吞吐量。Observer 和 Follower 比较相似,只有一些小区别:首先 observer 不属于法定人数,即不参加选举也不响应提议,也不参与写操作的“过半写成功”策略;其次是 observer 不需要将事务持久化到磁盘,一旦 observer 被重启,需要从 leader 重新同步整个名字空间。 5.3会话(Session) Session 指的是 ZooKeeper 服务器与客户端会话。在 ZooKeeper 中,一个客户端连接是指客户端和服务器之间的一个 TCP 长连接。客户端启动的时候,首先会与服务器建立一个 TCP 连接,从第一次连接建立开始,客户端会话的生命周期也开始了。通过这个连接,客户端能够通过心跳检测与服务器保持有效的会话,也能够向Zookeeper 服务器发送请求并接受响应,同时还能够通过该连接接收来自服务器的Watch事件通知。 Session 的 sessionTimeout 值用来设置一个客户端会话的超时时间。当由于服务器压力太大、网络故障或是客户端主动断开连接等各种原因导致客户端连接断开时,只要在sessionTimeout规定的时间内能够重新连接上集群中任意一台服务器,那么之前创建的会话仍然有效。在为客户端创建会话之前,服务端首先会为每个客户端都分配一个sessionID。由于 sessionID 是 Zookeeper 会话的一个重要标识,许多与会话相关的运行机制都是基于这个 sessionID 的,因此,无论是哪台服务器为客户端分配的 sessionID,都务必保证全局唯一。 5.3.1 会话(Session) 在Zookeeper客户端与服务端成功完成连接创建后,就创建了一个会话,Zookeeper会话在整个运行期间的生命周期中,会在不同的会话状态中之间进行切换,这些状态可以分为CONNECTING、CONNECTED、RECONNECTING、RECONNECTED、CLOSE等。 一旦客户端开始创建Zookeeper对象,那么客户端状态就会变成CONNECTING状态,同时客户端开始尝试连接服务端,连接成功后,客户端状态变为CONNECTED,通常情况下,由于断网或其他原因,客户端与服务端之间会出现断开情况,一旦碰到这种情况,Zookeeper客户端会自动进行重连服务,同时客户端状态再次变成CONNCTING,直到重新连上服务端后,状态又变为CONNECTED,在通常情况下,客户端的状态总是介于CONNECTING 和CONNECTED 之间。但是,如果出现诸如会话超时、权限检查或是客户端主动退出程序等情况,客户端的状态就会直接变更为CLOSE状态。 5.3.2 会话创建 Session是Zookeeper中的会话实体,代表了一个客户端会话,其包含了如下四个属性 sessionID。会话ID,唯一标识一个会话,每次客户端创建新的会话时,Zookeeper都会为其分配一个全局唯一的sessionID。 TimeOut。会话超时时间,客户端在构造Zookeeper实例时,会配置sessionTimeout参数用于指定会话的超时时间,Zookeeper客户端向服务端发送这个超时时间后,服务端会根据自己的超时时间限制最终确定会话的超时时间。 TickTime。下次会话超时时间点,为了便于Zookeeper对会话实行”分桶策略”管理,同时为了高效低耗地实现会话的超时检查与清理,Zookeeper会为每个会话标记一个下次会话超时时间点,其值大致等于当前时间加上TimeOut。 isClosing。标记一个会话是否已经被关闭,当服务端检测到会话已经超时失效时,会将该会话的isClosing标记为”已关闭”,这样就能确保不再处理来自该会话的心情求了。 Zookeeper为了保证请求会话的全局唯一性,在SessionTracker初始化时,调用initializeNextSession方法生成一个sessionID,之后在Zookeeper运行过程中,会在该sessionID的基础上为每个会话进行分配,初始化算法如下 public static long initializeNextSession(long id) { long nextSid = 0; // 无符号右移8位使为了避免左移24后,再右移8位出现负数而无法通过高8位确定sid值 nextSid = (System.currentTimeMillis() << 24) >>> 8; nextSid = nextSid | (id << 56); return nextSid; } 5.3.3 会话管理 Zookeeper的会话管理主要是通过SessionTracker来负责,其采用了分桶策略(将类似的会话放在同一区块中进行管理)进行管理,以便Zookeeper对会话进行不同区块的隔离处理以及同一区块的统一处理。 5.4 数据节点 Znode 在Zookeeper中,“节点"分为两类,第一类同样是指构成集群的机器,我们称之为机器节点;第二类则是指数据模型中的数据单元,我们称之为数据节点一一ZNode。 Zookeeper将所有数据存储在内存中,数据模型是一棵树(Znode Tree),由斜杠(/)的进行分割的路径,就是一个Znode,例如/foo/path1。每个上都会保存自己的数据内容,同时还会保存一系列属性信息。 5.4.1 节点类型 在Zookeeper中,node可以分为持久节点和临时节点和顺序节点三大类。 可以通过组合生成如下四种类型节点 1. PERSISTENT 持久节点,节点创建后便一直存在于Zookeeper服务器上,直到有删除操作来主动清楚该节点。 2. PERSISTENT_SEQUENTIAL 持久顺序节点,相比持久节点,其新增了顺序特性,每个父节点都会为它的第一级子节点维护一份顺序,用于记录每个子节点创建的先后顺序。在创建节点时,会自动添加一个数字后缀,作为新的节点名,该数字后缀的上限是整形的最大值。 3.EPEMERAL 临时节点,临时节点的生命周期与客户端会话绑定,客户端失效,节点会被自动清理。同时,Zookeeper规定不能基于临时节点来创建子节点,即临时节点只能作为叶子节点。 4.EPEMERAL_SEQUENTIAL 临时顺序节点,在临时节点的基础添加了顺序特性。 5.5 版本——保证分布式数据原子性操作 每个数据节点都具有三种类型的版本信息,对数据节点的任何更新操作都会引起版本号的变化。 version– 当前数据节点数据内容的版本号 cversion– 当前数据子节点的版本号 aversion– 当前数据节点ACL变更版本号 上述各版本号都是表示修改次数,如version为1表示对数据节点的内容变更了一次。即使前后两次变更并没有改变数据内容,version的值仍然会改变。version可以用于写入验证,类似于CAS。 5.6watcher事件监听器 ZooKeeper允许用户在指定节点上注册一些Watcher,当数据节点发生变化的时候,ZooKeeper服务器会把这个变化的通知发送给感兴趣的客户端 5.7 ACL 权限控制——保障数据的安全 ACL是Access Control Lists 的简写, ZooKeeper采用ACL策略来进行权限控制,有以下权限: CREATE:创建子节点的权限 READ:获取节点数据和子节点列表的权限 WRITE:更新节点数据的权限 DELETE:删除子节点的权限 ADMIN:设置节点ACL的权限 5.8 Paxos算法 Paxos算法是基于消息传递且具有高度容错特性的一致性算法,是目前公认的解决分布式一致性问题最有效的算法之一。(其他算法有二阶段提交、三阶段提交等) 六、ZooKeeper 可以做什么? 分布式服务注册与订阅 在分布式环境中,为了保证高可用性,通常同一个应用或同一个服务的提供方都会部署多份,达到对等服务。而消费者就须要在这些对等的服务器中选择一个来执行相关的业务逻辑,比较典型的服务注册与订阅,代表:dubbo。 分布式配置中心 发布与订阅模型,即所谓的配置中心,顾名思义就是发布者将数据发布到ZK节点上,供订阅者获取数据,实现配置信息的集中式管理和动态更新。代表:百度的disconf。 github:https://github.com/knightliao/disconf 命名服务 在分布式系统中,通过使用命名服务,客户端应用能够根据指定名字来获取资源或服务的地址,提供者等信息。被命名的实体通常可以是集群中的机器,提供的服务地址,进程对象等等——这些我们都可以统称他们为名字(Name)。其中较为常见的就是一些分布式服务框架中的服务地址列表。通过调用ZK提供的创建节点的API,能够很容易创建一个全局唯一的path,这个path就可以作为一个名称。 分布式锁 分布式锁,这个主要得益于ZooKeeper为我们保证了数据的强一致性。锁服务可以分为两类,一个是保持独占,另一个是控制时序。 所谓保持独占,就是所有试图来获取这个锁的客户端,最终只有一个可以成功获得这把锁。通常的做法是把zk上的一个znode看作是一把锁,通过create znode的方式来实现。所有客户端都去创建 /distribute_lock 节点,最终成功创建的那个客户端也即拥有了这把锁。 控制时序,就是所有视图来获取这个锁的客户端,最终都是会被安排执行,只是有个全局时序了。做法和上面基本类似,只是这里 /distribute_lock 已绊预先存在,客户端在它下面创建临时有序节点(这个可以通过节点的属性控制:CreateMode.EPHEMERAL_SEQUENTIAL来指定)。Zk的父节点(/distribute_lock)维持一份sequence,保证子节点创建的时序性,从而也形成了每个客户端的全局时序 Master选举 负载均衡 参考 《从Paxos到Zookeeper 》 《ZooKeeper深入浅出 》 不知道大家是否还记的文章开头的两个问题,碍于本文篇幅的原因这里不再一一解答,想要了解答案,想往架构师进发的小伙伴可以加群895244712一起交流学习,视频我已经整理好放在群文件了。 最后,如有帮助请转发,点赞。您的拇指是对我最好的支持!

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

初入数据科学领域,你需要有七个这样的思维

假设你刚刚被一家小型软件公司聘为数据科学家。你感到欣喜若狂!你的辛勤工作和坚持不懈终于得到了回报。是时候将你的统计数据和机器学习知识付诸实践了。那么恭喜你终于加入了数据革命。 第1天到来,每个人都很高兴见到这位“数据科学家”。该公司以前从未聘请过数据科学家,因此有些期望值并不切实际。更可怕的是你的主管可能不是数据科学家,你可能向她在第一天为你提供帮助。“请给我一些数据!”你可能认为数据很容易获得检索,或者至少它会以干净整洁的格式存储。很明显,雇用你的公司有一个宏伟的计划,在实现这个计划之前不可能什么都准备完毕,这也是你的价值所在! 对于大多数初级数据科学家加入小型公司(甚至是世界科技巨头之外的组织)。作为曾经又过这样经历的人,我想概述一些实用的想法,以帮助初级数据科学家在一家小型软件公司开始。这些步骤来自我个人的旅程和我之前的其他旅程。 1.获取公司领域专业知识 当我第一次在Nulogy担任数据科学家时,我急于绕过繁琐的入职流程,因为我只想玩数据。我花了几个月的时间才意识到,如果没有正确理解我所运营的域名,就很难提出并证明新项目的合理性,以便为业务带来哪些好处。 作为数据科学家,你需要了解你目前所属行业的细节。你还可以就如何进行探索性数据分析,自我批判你的发现并调查异常情况。拥有强大的专业知识使你能够执行更好的特征选择和工程设计。实际上,构建模型来优化系统而不了解当前系统如何工作的潜在细微差别是失败的一个因素。 2.能力提升 仅仅理解你的公司为数据科学家提供职位描述并不意味着他们对该职位的内容有深刻的理解。我的意思是让我们面对现实:有时我们也不会。我曾经读过一位数据科学主管的文章,他在开始担任新角色后,花了30%或更多的时间在整个组织内建立对数据科学和机器学习的共同理解(这是原始故事)。对于数据科学家在机器学习领域开展工作而言,这是一个很好的开始。你可以选择使用R或Python教授课程,或者提供课程让你及周围的人围绕统计分析和机器学习建立直觉。这对于帮助同事识别机器学习和数据科学有很大等帮助同时这也帮助你周围的人了解你的具体操作,这样在工作协同等时候更得心应手。 3.数据理解 这可能是最重要的,也是最容易解释的。一位新的数据科学家应该是这样理解的: · 如何产生数据; · 如何收集,存储和处理它; · 数据库的基础架构; 了解数据的产生和收集方式至关重要,因为它使你能够确定你是否可以按原样信任数据,或者是否需要进一步预处理才能使用或呈现数据。了解数据库的基础架构将加快查询过程,并帮助你最大限度地减少在提取数据时所犯的错误。确定需要收集哪些数据以实现公司的数据科学战略(你应该在整个中发挥重要作用)也很重要。 4.构建知识库(民主化数据) 数据科学家的角色不应局限于A / B测试、建立模型和发现相关性。相反,数据科学家应该在组织中创建数据驱动的文化中发挥关键作用。一个很好的起点是使你对所有员工所做工作的访问民主化。Airbnb有一篇很棒的文章,关于建立它所谓的“知识回购”。知识回购的目的是促进整个组织的知识共享,最简单的方法是使用Jupyter笔记本和R降价文件记录所有数据科学工作,并使组织中的任何人都可以轻松访问它们。你可以通过共享使用Shiny创建的简单应用程序将其提升到新的水平,使你的同事能够操纵输入并观察输出(数字或绘图)如何变化。 5.专注于小胜利 当作为小公司的第一位数据科学家时,很可能不会立马有机器学习策略。通过识别机器学习机会并立即建立复杂模型来尝试开始工作可能会令人沮丧。这是因为你仍然不熟悉业务领域,你还没有沉浸在公司的数据基础架构中,甚至可能没有数据管道设置! 该怎么办?专注于小胜利。 组织中的每个级别都存在数据疏忽问题。你可以解决重要领域的实体,通过数据驱动的决策支持销售和营销,帮助产品团队设置,跟踪和评估KPI,同时在公司的数据科学路线图中并行工作。 这里的关键是让立即证明自己的价值。 6.重复After Me:ROI 我们中的许多数据科学家都陷入了解决数学复杂问题和构建机器学习算法的诱惑力。也就是说,现实情况是,我们认为“有趣”问题的很大一部分不会带来任何回报给我们的雇主。这些问题充其量只能充当冷静的对话启动者。 对于数据科学家而言,关注能够为其组织带来投资回报(ROI)的问题极为重要。问问自己,在这个项目上话费了多少美元?一个好的建议是让利益相关者参与构思过程,例如产品经理,客户经理或更好的实际客户。 同样,知道何时停止也很重要。例如,投资回报率是否会将模型的准确度提高5%,证明所需的努力和资源是合理的,还是模型在当前状态下足够好?让ROI和道德规范成为数据科学决策的两个指导原则。 7.数据科学路线图 在数据科学中,重要的是要提前考虑。你下一季度的数据科学游戏是什么?到年底怎么样?明年呢?从我卑微的经历来看,这项任务很难单独完成;你需要产品管理和高级管理人员的帮助,以了解数据科学最适合的位置以及最大化ROI的位置。然而,构建和传播数据科学路线图对于传达数据科学在组织中的作用和重要性至关重要。 将所有这些结合在一起 我没有数据可以证明这一点,但数据科学家在工作中不能长时间存在的理论已有详细记载。潜在的主题往往是数据科学家没有受到足够的挑战,因此他们总是在寻找“更性感”的事情。尽管如此,大多数中小型软件公司的原始现实是,数据科学不是一个具有深思熟虑战略和预定目标的预定义角色。这是一个具有巨大未开发潜力的新发现领域,其中大部分需要在利润、数据分析、统计和机器学习以及有针对性的数据通信之间确定和建立正确的桥梁。总而言之,数据科学是一个过程,有一个开始,有时不那么明确的结束。 本文由阿里云云栖社区组织翻译。 文章原标题《seven-practical-ideas-beginner-data-scientists》 作者:Wafic El-Assi译者:乌拉乌拉,审校:。 文章为简译,更为详细的内容,请查看原文。

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

《 产品设计思维:电商产品设计全攻略》一一导读

前 言 为什么要写这本书互联网进入我国也就二十多年,从全国各行业的发展来看,它仍然是一个新兴领域,从互联网到移动互联网,从移动互联网到物联网,万物互联互通,其发展的势头令世人惊叹。最近几年,我国政府更是将“互联网+”等基于互联网的变革提升到了国家战略的地位。作为一个与互联网共生的人,我感到异常荣幸与兴奋,互联网不仅深深地影响了国家、行业的发展格局,同时也对我个人的成长产生了重大的影响。如果让我选出20世纪最伟大的发明,我认为当之无愧的是“互联网”,其影响力将会波及整个21世纪甚至更久远的未来。2011年德国汉诺威博览会上提出了“第四次工业革命”的概念,互联网的价值与影响力由此被提升到了一个战略级高度,我国政府也在工作报告中提出了“互联网+”的战略,我国的绝大部分企业都在基于互联网络进行转型,要么适应互联网时代的变化,要么被互联网革

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

物联网生态体系需要互生共荣 最忌买断式硬件思维

物联网产业的经济型态较偏互利共享,但很多业者多只想一次性买断设备后独享利益,这种封闭性格局,不利于物联网导入与发展。 在物联网(IoT)的浪潮下,没有任何一家公司能够完整掌握其产品开发所需要的知识与技术,唯有建立生态系,以开放式心态海纳百川,透过标准化平台架构,整合用户和信息,以打群架的方式共存共荣,才能在物联网时代胜出。物联网业者直指,很多业者偏向买设备心态,只想要一次性买断后独享利益,不利于物联网平台生态的发展。 达运光电长期专注在有线电视传输设备,过去提供有线电视系统光纤同轴缆线传输设备为主,近年也跨入物联网平台解决方案服务。达运光电物联网团队负责人戴家维表示,目前公司采用B2B2C营运模式,提供物联网平台解决方案,透过自有品牌ACI,协助有线电视业者提供用户各种智能家居服务,目前平台已被韩国有线电视系统商采用。 关于达运光电与全球有线电视业者合作范畴,戴家维表示,有线电视系统即具地方色彩产业,各地物联网客户需求迥异,达运协助有线电视业者依照当地市场需求,提供各种物联网终端装置订制化整合服务,例如某间公司想纳入亚马逊(Amazon)超声控喇叭Echo,即透过达运物联网平台整合,再由系统业者提供订阅服务。 在物联网平台营运模式细节,戴家维强调,达运物联网平台不希望一次买断,与有线电视业者关系比较像是策略联盟模式,由达运提供物联网技术专业,有线电视负责通路拓展,在业务上由双方共同分享利润。 戴家维进一步解释,达运将平台打造成一个生态系,由达运这端完成云端平台汇整,并提供完整应用程序编程接口(Application Programming Interface;API)接口,让系统业者可透过App,提供客户更多服务内容,让双方共同成长。 戴家维表示,达运光电物联网平台目前已经整合门窗口测器、温湿度传感器、网络摄影机,漏水传感器、智能插座、灯泡等,目前发展历程加入居家健康管理服务,今年也会将亚马逊超声控喇叭Echo整合入平台。 对于有线电视系统业者在物联网布局,戴家维强调,物联网产业比较偏向共享经济型态,需要透过多个业者在互利共享条件下,共同发展与持续成长,但很多业者偏向买设备心态,只想要一次性买断后独享利益,这种封闭性格局,不利于物联网导入与发展。 本文转自d1net(转载)

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

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应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册