iOS BLE 开发小记[1] - CoreBluetooth 是什么

iOS BLE 开发小记[1] - CoreBluetooth 是什么,第1张

现在我们都知道,很多智能硬件设备都已经集成了低功耗蓝牙模块,这样我们就可以开发一个 iOS 或者 Mac APP 与它们进行交互。从 macOS 109 和 iOS 6 以后,Mac 和 iOS 设备就支持 低功耗蓝牙技术了,我们可以通过 CoreBluetooth 这个框架与底层的各种蓝牙协议栈进行交互,比如 GATT、ATT 和 L2CAP 等。

与底层交互的过程如下图所示:

开始下文之前,我们需要了解几个概念。对蓝牙不够了解的可以看一下维基百科关于 蓝牙 的简介。

Bluetooth 40 : 蓝牙 40 是 Bluetooth SIG 于2010年7月7日推出的新的规范,其最重要的特性是功耗低,省电!

BLE : Bluetooth low energy wireless technology,也就是低功耗无线蓝牙技术。

BLE 是关于蓝牙40 的详细说明,它定义了一套用于低功耗设备之间通信的协议。而CoreBluetooth 则是对 BLE 协议栈的抽象。也就是说,它隐藏了许多底层的详细实现细节,这样对我们开发者来说,开发一个 APP 与 BLE 设备进行交互将会很便捷。

CoreBluetooth 中最关键的两个角色就是 Central(中心) 和 Peripheral(周边), Peripheral 一般是提供数据的一方,而 Central 一般获取 Peripheral 提供的数据然后来完成特定的任务。举个例子,一个集成 BLE 的数字室温计可能提供房间中的实时温度,我们通过 APP 就可以读取、分析和显示房间中的温度。

Peripheral 通过向空中广播数据的方式来使我们能感知到它的存在。Central 通过扫描搜索来发现周围正在广播数据的 Peripheral, 找到指定的 Peripheral 后,发送连接请求进行连接,连接成功后则与 Peripheral 进行一些数据交互, Peripheral 则会通过合适的方式对 Central 进行响应。

CoreBluetooth 对通用的蓝牙任务进行了简化处理,你在 App 中通过 CoreBluetooth 来集成 BLE 功能将会变得简单,如果你开发的 APP 遵循了 Centrals 的开发规范,CoreBluetooth 将会帮你处理与 Peripheral 的扫描、连接以及数据交互的过程,除此之外,通过 CoreBluetooth 将你的设备设置为 本地 Peripheral 也会很便捷。

iOS APP 的状态也会影响蓝牙的行为,当你的 APP 在后台运行或者处于暂停状态中,蓝牙的行为将会受到影响。默认情况下,当你的 APP 在后台运行时或者处于暂停状态中,你的 APP 是不能与 BLE 进行数据通信的,也就是说,当 APP 后台运行时,你需要与 BLE 进行数据通信,你需要声明你的 APP 支持蓝牙后台运行模式,即使你声明了支持后台运行模式,蓝牙在后台运行模式下的数据处理方式也会变得不同,当开发你的 BLE APP 时,你需要注意这些不同点。

即使 APP 在后台运行时,当系统内存过低时也会杀掉 APP 的后台进程,对于 iOS 7,CoreBluetooth 支持 Central 和 Peripheral 的状态信息的保存和恢复。可以通过这个功能来实现与 BLE 设备的长期交互。

CoreBluetooth 框架为你的 APP 与许多常见的 BLE 设备进行交互提供了交互接口,通过合理的利用和实践将会提高用户的体验。

举个例子,当你实现 Central 或 Peripheral 的功能时,会利用设备携带的无线电广播设备(Radio)向空中广播信号,这样就会影响到电池的续航时间,因此当你设计 APP 时,需要尽可能的减少 Radio 的使用频率。

重要提醒: 在 iOS 10以后,通过 CoreBluetooth 与 BLE 设备进行数据通信时,必须在项目的 Infoplist 文件中包含关于 NSBluetoothPerpheralUsageDescription 的描述,否则会导致 APP 闪退,详情见 NSBluetoothPerpheralUsageDescription 。

在 BLE 通信中主要包含两种角色:Central(中心)和 Peripheral(周边),基于传统的客户-服务器架构,Peripheral 通常会提供其他设备需要的数据,Central 通常利用通过 Peripheral 获取的信息来完成特定的任务,如图所示,心率监视器 提供数据给 Mac 或 iOS APP,然后来显示用户的心率数据。

Peripheral 以广播数据包的形式广播服务中的数据,广播数据包指的是包含 Peripheral 有用信息的一个较小数据包,比如 Peripheral 的名字和主要功能数据。比如,一个数字室温计广播的数据中可能包括当前室温,对于 BLE,广播是显示它们存在的主要方式。

如图,对于一个 Central 来说,它能够搜索和获取到它想要的 Peripheral 的广播信息。

连接 Peripheral 的目的就是和 Peripheral 提供的数据进行交互,在你理解这一点后,可以更好的明白 Peripheral 的数据组成结构。

Peripheral 包含一个或多个 Service(服务)和连接信号强度的有用信息。Service 可以理解成是一个完成指定功能的数据集合。举个例子,一个心率监测服务的功能就是可能就是从心率传感器中读取心率数据。

Service 是由 Characteristic(特征) 组成的,Characteristic 为 Peripheral 的 Service 提供更详细的信息,举个例子,心率服务可能包含一个测量不同体位的心率数据的 Characteristic 和一个传输心率数据的 Characteristic,下图所示的是一个心率监测设备的数据组成结构。

当 Central 与 Peripheral 建立成功的连接后,Central 可以发现 Peripheral 提供的全系列的 Service 和 Characteristic,广播数据包中的数据仅仅是可用服务的一小部分而已。

Central 可以通过读取或写入 Service Characteristic 值的方式与 Service 进行交互。你的 APP 也许需要从数字室温计中获取当前室内的温度或者设置一个温度值到数字室温计中。

BLE 通信过程中涉及到的主要角色和数据处理已经简单的集成到 CoreBluetooth 框架中了。

当你通过本地 Central 与周边 Peripheral 进行交互时,你只需要调用 Central 方面的方法就可以了,除非你设置一个本地 Peripheral,并用它来响应其他的 Central 的交互请求,实际运用中,你的蓝牙处理大部分会在 Central 方面。

在 Central 方面,用 CBCentralManager 对象来表示一个Local Central 设备,这个对象被用来管理 Remote Peripheral 设备(用 CBPeripheral 对象来表示),包括搜索和连接正在广播数据的 Peripheral。如图所示的是 CoreBluetooth 框架中如何表示 Local Central 和 Remote Peripheral。

当你与 Remote Peripheral 进行数据交互时,你将处理它的 Service 和 Characteristic,在 CoreBluetooth 框架中,用 CBService 对象来表示 Peripheral 中的服务,同样地,用 CBCharacteristic 对象来表示 Service 中的特征。下图所示的是 Remote Peripheral 的服务特征结构树。

对于 macOS 109 和 iOS 6, Mac 和 iOS 设备可以实现 BLE Peripheral 的功能,如为其他设备(包括 Mac,iPhone,和 iPad)提供数据。当你遵循 Peripheral 的开发规范时,就可以调用 BLE 通信的 Peripheral 方面的方法。

在 Peripheral 方面,一个 Local Peripheral 可以用 CBPeripheralManager 对象来表示,这个对象被用来管理发布包含的服务,包括组织构建 Peripheral 的数据结构以及向中心设备广播数据,Peripheral Manager 也对 Remote Central的读写交互请求做出响应。如图所示的是一个 Local Peripheral 和 Remote Central。

当你设置并与 Local Peripheral 进行数据交互时,你处理的是它的可变的 Service 和 Characteristic,在 CoreBluetooth 框架中,用 CBMutableService 对象来表示 Local Peripheral 中的服务,同样地,用 CBMutableCharacteristic 对象来表示Local Peripheral 服务中的特征。下图表示的是一个 Local Peripheral 中的服务特征结构树。

后续章节会进一步补充关于 BLE 开发的知识。

1、 TP40013257-CH1-SW1

2、 CoreBluetoothOverview

欢迎在本文下面留言一起交流心得

1 大型网站系统的特点

2 大型网站架构演化历程

21 初始阶段架构

问题:网站运营初期,访问用户少,一台服务器绰绰有余。

特征:应用程序、数据库、文件等所有的资源都在一台服务器上。

描述:通常服务器 *** 作系统使用 linux,应用程序使用 PHP 开发,然后部署在 Apache 上,数据库使用 Mysql,通俗称为 LAMP。汇集各种免费开源软件以及一台廉价服务器就可以开始系统的发展之路了。

22 应用服务和数据服务分离

问题:越来越多的用户访问导致性能越来越差,越来越多的数据导致存储空间不足,一台服务器已不足以支撑。

特征:应用服务器、数据库服务器、文件服务器分别独立部署。

描述:三台服务器对性能要求各不相同:应用服务器要处理大量业务逻辑,因此需要更快更强大的 CPU;数据库服务器需要快速磁盘检索和数据缓存,因此需要更快的硬盘和更大的内存;文件服务器需要存储大量文件,因此需要更大容量的硬盘。

23 使用缓存改善性能

问题:随着用户逐渐增多,数据库压力太大导致访问延迟。

特征:由于网站访问和财富分配一样遵循二八定律:80% 的业务访问集中在 20% 的数据上。将数据库中访问较集中的少部分数据缓存在内存中,可以减少数据库的访问次数,降低数据库的访问压力。

描述:缓存分为两种:应用服务器上的本地缓存和分布式缓存服务器上的远程缓存,本地缓存访问速度更快,但缓存数据量有限,同时存在与应用程序争用内存的情况。分布式缓存可以采用集群方式,理论上可以做到不受内存容量限制的缓存服务。

24 使用应用服务器集群

问题:使用缓存后,数据库访问压力得到有效缓解。但是单一应用服务器能够处理的请求连接有限,在访问高峰期,成为瓶颈。

特征:多台服务器通过负载均衡同时向外部提供服务,解决单一服务器处理能力和存储空间不足的问题。

描述:使用集群是系统解决高并发、海量数据问题的常用手段。通过向集群中追加资源,提升系统的并发处理能力,使得服务器的负载压力不再成为整个系统的瓶颈。

25 数据库读写分离

问题:网站使用缓存后,使绝大部分数据读 *** 作访问都可以不通过数据库就能完成,但是仍有一部分读 *** 作和全部的写 *** 作需要访问数据库,在网站的用户达到一定规模后,数据库因为负载压力过高而成为网站的瓶颈。

特征:目前大部分的主流数据库都提供主从热备功能,通过配置两台数据库主从关系,可以将一台数据库服务器的数据更新同步到一台服务器上。网站利用数据库的主从热备功能,实现数据库读写分离,从而改善数据库负载压力。

描述:应用服务器在写 *** 作的时候,访问主数据库,主数据库通过主从复制机制将数据更新同步到从数据库。这样当应用服务器在读 *** 作的时候,访问从数据库获得数据。为了便于应用程序访问读写分离后的数据库,通常在应用服务器端使用专门的数据访问模块,使数据库读写分离的对应用透明。

26 反向代理和 CDN 加速

问题:中国网络环境复杂,不同地区的用户访问网站时,速度差别也极大。

特征:采用 CDN 和反向代理加快系统的静态资源访问速度。

描述:CDN 和反向代理的基本原理都是缓存,区别在于 CDN 部署在网络提供商的机房,使用户在请求网站服务时,可以从距离自己最近的网络提供商机房获取数据;而反向代理则部署在网站的中心机房,当用户请求到达中心机房后,首先访问的服务器时反向代理服务器,如果反向代理服务器中缓存着用户请求的资源,就将其直接返回给用户。

27 分布式文件系统和分布式数据库

问题:随着大型网站业务持续增长,数据库经过读写分离,从一台服务器拆分为两台服务器,依然不能满足需求。

特征:数据库采用分布式数据库,文件系统采用分布式文件系统。

描述:分布式数据库是数据库拆分的最后方法,只有在单表数据规模非常庞大的时候才使用。不到不得已时,更常用的数据库拆分手段是业务分库,将不同的业务数据库部署在不同的物理服务器上。

28 使用 NoSQL 和搜索引擎

问题:随着网站业务越来越复杂,对数据存储和检索的需求也越来越复杂。

特征:系统引入 NoSQL 数据库及搜索引擎。

描述:NoSQL 数据库及搜索引擎对可伸缩的分布式特性具有更好的支持。应用服务器通过统一数据访问模块访问各种数据,减轻应用程序管理诸多数据源的麻烦。

29 业务拆分

问题:大型网站的业务场景日益复杂,分为多个产品线。

特征:采用分而治之的手段将整个网站业务分成不同的产品线。系统上按照业务进行拆分改造,应用服务器按照业务区分进行分别部署。

描述:应用之间可以通过超链接建立关系,也可以通过消息队列进行数据分发,当然更多的还是通过访问同一个数据存储系统来构成一个关联的完整系统。

纵向拆分:将一个大应用拆分为多个小应用,如果新业务较为独立,那么就直接将其设计部署为一个独立的 Web 应用系统。纵向拆分相对较为简单,通过梳理业务,将较少相关的业务剥离即可。

横向拆分:将复用的业务拆分出来,独立部署为分布式服务,新增业务只需要调用这些分布式服务横向拆分需要识别可复用的业务,设计服务接口,规范服务依赖关系。

210 分布式服务

问题:随着业务越拆越小,存储系统越来越庞大,应用系统整体复杂程度呈指数级上升,部署维护越来越困难。由于所有应用要和所有数据库系统连接,最终导致数据库连接资源不足,拒绝服务。

特征:公共业务提取出来,独立部署。由这些可复用的业务连接数据库,通过分布式服务提供共用业务服务。

3 大型网站架构模式

31 分层

大型网站架构中常采用分层结构,将软件系统分为应用层、服务层、数据层:

分层架构的约束:禁止跨层次的调用(应用层直接调用数据层)及逆向调用(数据层调用服务层,或者服务层调用应用层)。

分层结构内部还可以继续分层,如应用可以再细分为视图层和业务逻辑层;服务层也可以细分为数据接口层和逻辑处理层。

32 分割

将不同的功能和服务分割开来,包装成高内聚低耦合的模块单元。这有助于软件的开发和维护,便于不同模块的分布式部署,提高网站的并发处理能力和功能扩展能力。

33 分布式

大于大型网站,分层和分割的一个主要目的是为了切分后的模块便于分布式部署,即将不同模块部署在不同的服务器上,通过远程调用协同工作。

分布式意味可以用更多的机器工作,那么 CPU、内存、存储资源也就更丰富,能够处理的并发访问和数据量就越大,进而能够为更多的用户提供服务。

分布式也引入了一些问题:

常用的分布式方案:

34 集群

集群即多台服务器部署相同应用构成一个集群,通过负载均衡设备共同对外提供服务。

集群需要具备伸缩性和故障转移机制:伸缩性是指可以根据用户访问量向集群添加或减少机器;故障转移是指,当某台机器出现故障时,负载均衡设备或失效转移机制将请求转发到集群中的其他机器上,从而不影响用户使用。

35 缓存

缓存就是将数据存放在距离最近的位置以加快处理速度。缓存是改善软件性能的第一手段。

网站应用中,缓存除了可以加快数据访问速度以外,还可以减轻后端应用和数据存储的负载压力。

常见缓存手段:

使用缓存有两个前提:

36 异步

软件发展的一个重要目标和驱动力是降低软件耦合性。事物之间直接关系越少,彼此影响就越小,也就更容易独立发展。

大型网站架构中,系统解耦的手段除了分层、分割、分布式等,还有一个重要手段——异步。

业务间的消息传递不是同步调用,而是将一个业务 *** 作拆分成多阶段,每个阶段间通过共享数据的方式异步执行进行协作。

异步架构是典型的生产者消费模式,二者不存在直接调用。异步消息队列还有如下特性:

37 冗余

大型网站,出现服务器宕机是必然事件。要保证部分服务器宕机的情况下网站依然可以继续服务,不丢失数据,就需要一定程度的服务器冗余运行,数据冗余备份。这样当某台服务器宕机是,可以将其上的服务和数据访问转移到其他机器上。

访问和负载很小的服务也必须部署 至少两台服务器构成一个集群,目的就是通过冗余实现服务高可用。数据除了定期备份,存档保存,实现 冷备份 外;为了保证在线业务高可用,还需要对数据库进行主从分离,实时同步实现 热备份。

为了抵御地震、海啸等不可抗因素导致的网站完全瘫痪,某些大型网站会对整个数据中心进行备份,全球范围内部署 灾备数据中心。网站程序和数据实时同步到多个灾备数据中心。

38 自动化

大型网站架构的自动化架构设计主要集中在发布运维方面:

39 安全

4 大型网站核心架构要素

架构 的一种通俗说法是:最高层次的规划,难以改变的决定。

41 性能

性能问题无处不在,所以网站性能优化手段也十分繁多:

42 可用性

可用性指部分服务器出现故障时,还能否对用户提供服务

43 伸缩性

衡量伸缩的标准就是是否可以用多台服务器构建集群,是否容易向集群中增删服务器节点。增删服务器节点后是否可以提供和之前无差别的服务。集群中可容纳的总服务器数是否有限制。

44 扩展性

衡量扩展性的标准就是增加新的业务产品时,是否可以实现对现有产品透明无影响,不需要任何改动或很少改动,既有功能就可以上线新产品。主要手段有:事件驱动架构和分布式服务。

45 安全性

安全性保护网站不受恶意攻击,保护网站重要数据不被窃取。

欢迎工作一到五年的Java工程师朋友们加入Java程序员开发: 721575865

群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

苹果macOS机型对照表

当前本店苹果macOS系统最高版本为:1014

机型的年代查看方法为:打开屏幕左上角苹果菜单,点关于本机。就能看到下图的界面。这里会显示苹果机型的年代,请按这个对照下方macos版本列表。

# MacBook Pro

电脑型号推出日期最低macOS版本最高macOS版本建议macOS版本

MacBook Pro 15寸 有触控条 2018年中期2018年6月1013610141014

MacBook Pro 13寸 有触控条 2018年中期2018年6月1013610141014

MacBook Pro 15寸 有触控条 2017年2017年6月1012610141014

MacBook Pro 13寸 有触控条 2017年2017年6月1012610141014

MacBook Pro 13寸 无触控条 2017年2017年6月1012610141014

MacBook Pro 15寸 2016年末2016年11月1012610141014

MacBook Pro 13寸 2016年末 有触控条2016年11月1012610141014

MacBook Pro 13寸 2016年末 无触控条2016年10月1012610141014

MacBook Pro 15寸 2015年中2015年5月1010510141014

MacBook Pro 13寸 2015年初2015年3月1010510141014

MacBook Pro 13/15寸 2014年中2014年7月109510141014

MacBook Pro 13/15寸 2013年末2013年10月109510141014

MacBook Pro 13/15寸 2013年初2013年2月108510141014

MacBook Pro 13寸 2012年末2012年10月108510141014

MacBook Pro 13寸 Retina 2012年中2012年6月107510141014

MacBook Pro 13/15寸 2012年中2012年6月107510141014

MacBook Pro 13/15/17寸 2011年末2011年10月10751013610126

MacBook Pro 13/15/17寸 2011年初2011年2月10661013610126

MacBook Pro 13寸 2010年中2010年4月10751013610126

MacBook Pro 15/17寸 2010年中2010年4月10631013610126

MacBook Pro 13/15/17寸 2009年中2009年6月10571011610116

MacBook Pro 17寸 2009年初2009年1月10561011610116

MacBook Pro 15/17寸 2008年初/末2008年10月10561011610116

MacBook Pro 15/17寸 24/22 GHz2007年6月1041010751075

MacBook Pro 15/17寸 Core 2 Duo2006年10月1041010751075

MacBook Pro 15/17寸 镜面2006年2/4月1041010751075

# MacBook Air

电脑型号推出日期最低版本最高版本建议版本

MacBook Air 13寸 2017年2017年6月1012610141014

MacBook Air 11/13寸 2015年初2015年3月1010510141014

MacBook Air 11/13寸 2014年初2014年4月109510141014

MacBook Air 11/13寸 2013年中2013年6月108510141014

MacBook Air 11/13寸 2012年中2012年6月107510141014

MacBook Air 11/13寸 2011年中2011年7月10751013610126

MacBook Air 11/13寸 2010年末2010年10月10641013610126

MacBook Air 13寸 2009年中2009年6月10561011610116

MacBook Air 13寸 2008年末2008年11月10561011610116

MacBook Air 13寸 2008年初2008年11月105610751075

# MacBook

电脑型号推出时间最低版本最高版本建议版本

MacBook 12寸 2017年2017年6月1012610141014

MacBook 12寸 2016初2016年4月1011610141014

MacBook 12寸 2015初2015年4月1010510141014

MacBook 13寸 2010中2010年5月10631013610126

MacBook 13寸 2009末2009年10月10631013610126

MacBook 13寸 2009初/中2009年1月10561011610116

MacBook 13寸 2008末铝合金外壳2008年10月10561011610116

MacBook 13寸 2008末 (非铝合金外壳)2008年10月105610751075

MacBook 13寸 2008初2008年2月105610751075

MacBook 13寸 2007中/末2007年5/10月10561075106X

MacBook 13寸 2006年末2006年11月104810751075

MacBook 13寸 2006年初2006年5月10481075106X

# iMac

电脑型号推出时间最低版本最高版本推荐版本

iMac Pro 27寸 5K 2017年2017年12月1013310141014

iMac 27寸 5K 2017年2017年6月1012610141014

iMac 215寸 4K 2017年2017年6月1012610141014

iMac 215寸 普通屏 2017年2017年6月1012610141014

iMac 215/27寸 2015年末2015年10月1011610141014

iMac 27寸 5K 2015年中2015年5月1010510141014

iMac 27寸 5K 2014年末2014年10月1010510141014

iMac 215寸 2014年中2014年6月109510141014

iMac 215/27寸 2013年末2013年9月108510141014

iMac 215/27寸 2012年末2012年11/12月108510141014

iMac 215寸 2011年末2011年8月10751013610126

iMac 215/27寸 2011年中2011年5月10661013610126

iMac 27寸 2010年中2010年7月10631013610126

iMac 215寸 2010年中2010年7月10631013610126

iMac 215/27寸 2009年末2009年10/11月10631013610126

iMac 20寸 2009年中2009年4月10561011610116

iMac 20/24寸 2009年初2009年3月10561011610116

iMac 20/24寸 2008年初2008年4月10561011610116

iMac 20/24寸 2007年中2007年8月104101011610116

iMac 17/20/24寸 2006年末2006年9月104710751075

iMac 17 2006年初/中2006年1/7月104610751075

# Mac Mini

电脑型号推出日期最低macOS版本最高macOS版本建议macOS版本

Mac Mini 2014年末2014年10月1010510141014

Mac Mini/Server 2012年末2012年10月108510141014

Mac Mini/Server 2011年中2011年7月10751013610136

Mac Mini 2010年中2010年6月10631013610136

Mac Mini 2009年末2009年10月10631011610116

Mac Mini 2009年初2009年3月10561011610116

Mac Mini 2007年中2007年8月1041010751075

Mac Mini 2006年末2006年9月104710751075

Mac Mini 2006年初2006年3月104510751075

# Mac Pro (台式主机)

电脑型号推出日期最低macOS版本最高macOS版本建议macOS版本

Mac Pro 2013年末2013年12月109510141014

Mac Pro 2012年中2012年6月107510141014

Mac Pro 2010年中2010年8月1064101410136

Mac Pro 2009年初2009年3月10561011610116

Mac Pro 2008年初2008年1月10561011610116

Mac Pro 2006年中2006年8月104710751075

# Xserve (机架式服务器)

电脑型号推出日期最低macOS版本最高macOS版本建议macOS版本

Xserve 2009年初2009年4月10561011610116

Xserve 2008年初2008年1月105110751075

Xserve 2006年末2006年11月104810751075

架构师,我想很多人都知道,其实该职位头衔在最早的IT领域是没有的,它是近些年来由互联网的发展所引发的需求,因为现阶段的数据量及高并发的活跃好动,引起了不少传统的技术人员的力不从心,企业愈发关注到了系统架构的重要性,所以不同行业开始招募架构技术人员,架构师就诞生了。

架构设计的条件

以下三个条件不适合做架构设计

对架构不感兴趣,但又迫于需求;

入IT行业,年限小于4年的;

主观能动性弱,又安于现状的;

架构设计的优势

更好的梳理业务的结构体系;

更好的拓展、维护及性能优化;

更好的适应企业业务灵活的推进;

更好的适应大数据的冲洗和应对;

更好的稳定性、低成本及快速迭代;

架构设计时候需要注意的地方

架构设计需要注意的地方,不是怎么把架构搭建起来,而是必须根据业务需求,严格分析,实现该需求需要什么技术会更好及更长远发展的考虑;

另外,构建好的架构虽然可以运行,但是性能需要跟起来,否则架构设计会适得其反,增加不必要的工作量,那么下面就详细介绍下架构设计的策略。

平台的需求

客户需求

在线购物、在线支付或货到付款;

购买商品后,客户可以与客服沟通;

购买商品过程,物流的管理及跟踪;

收取到商品后,商品、物流评价打分;

客户的需求为最高,也代表了企业的核心需求,当然,企业需求还包括其它很多非功能性需求,具体请查看需求梳理部分。

平台的业务架构

根据业务的需求进行子系统模块划分,可以划分为商品子系统、购物子系统、支付子系统、物流子系统、客服子系统、评论子系统;而非核心需求可拆分出客服子系统、评论子系统及接口子系统。另外,根据各个子系统的核心等级,可拆分出核心子系统和非核心子系统,前者包括商品子系统、购物子系统、支付子系统及物流子系统;后者,则包括评论子系统、客服子系统及接口子系统。需要注意的是一般大型电商平台的物流系统是单独分离出来的系统(入库、出库、库存管理、配送管理及货品管理),而这里划分为子系统的主要目的是为演示核心架构,本架构中物流子系统一般作为对接和管理独立子系统的对接模块哦。

1、业务拆分目的

为了解决各个模块子系统间的耦合、维护及拓展性;

方便单独部署子系统,避免集中部署导致一个出问题,全部不能用;

分配专门的团队,负责具体的子系统,最大化工作效率安排;

应对大数据,高压力时,保护核心子系统正常使用;

2、业务的架构图

在上面的业务架构图中,将核心和非核心业务进行拆分,同时每个系统都要独立部署实现,做到大数据量压下,各个系统独立运作,提高可用性,必要时可以暂停掉非核心系统的资源开销,保证核心业务正常为用户服务。

平台的技术架构

在上面业务架构图基础上,我们需要一个技术架构的演变过程,一切只为满足用户的体验和支撑为前提,所以技术架构的搭建不是一蹴而就的,而是随着业务的不断衍变,系统的架构会逐渐完善更新,以实现应对业务数据量的冲击。

1、基本的架构设计

记得很早的时候,很多中小企业所采用的架构设计十分简单,基本使用一台服务器来满足一切需求部署,比如:一台服务器同时用作应用部署、数据库存储以及存储等,不料的是待用户数据达到50万以上,系统出现很多性能问题,尽管对数据库和程序做个各种性能优化,结果仍无明显改善,架构如下:

后来,IT程序猿发现的读写严重影响了系统性能,并将单独存放在独立服务器中,并且在架构中引入了Cache中间件,比如:Memcache,这种做法是可取的,而且比原来性能提高了1-2个性能级别,架构设计如下:

2、初级的架构设计

前几年,一般的电商网站的做法是选用三台服务器,一台部署应用,一台部署数据库,一台部署NFS文件系统,做到将各个规模庞大并耗用性能的部分剥离到不同服务器设备,再配备必要的缓存中间件,基本可以满足近1000万的数据量,具体的架构图如下:

但是,目前主流使用的网站架构已经不同,大多采用集群的方式来实现负载均衡和高可用性,架构可以是下面的样子:

注意:

如果涉及到多台网站服务器的话,就会存在Session如何同步的问题,一般也是最为常用的做法,就是使用Cache中间件来存储和管理Session信息。

3、优化的架构设计

这里为解决高并发,高可用的大型电商网站的架构设计方案,主要采用了分布式、集群、负载均衡、反向代理、消息队列及多级缓存技术。该架构设计方案,是现今比较流程的大型电商网站采用的架构模式,比如:淘宝、京东等,也许会有细微不同的地方,但大同小异哦!具体的架构图方案如下:

平台架构的总结

这里主要总结的是优化架构,架构按层次结构罗列组织,共分为四层,层次分工明确,高拓展,低耦合,负载均衡、集群、分布式及缓存等技术的使用,架构如下:

好了,电商平台的架构设计就介绍到这里,本篇主要是介绍架构设计的思路及应用的核心技术,供在架构设计的同学参考借鉴哦!有想了解更多的可以关注我

1选择插入选项卡中的插图功能集合,单击Smartart选项。

2打开选择smartar图形对话框,我们可以看到各种图形模板,选择层次结构。

3单击确定后,就会生成一个最基本的组织架构图框架。

4点击图标即可看到功能选项中多出了设计选项。单击设计选项下的添加形状。

MicrosoftExcel是Microsoft为使用Windows和AppleMacintosh *** 作系统的电脑编写的一款电子表格软件。直观的界面、出色的计算功能和图表工具,再加上成功的市场营销,使Excel成为最流行的个人计算机数据处理软件。

在1993年,作为MicrosoftOffice的组件发布了50版之后,Excel就开始成为所适用 *** 作平台上的电子制表软件的霸主。

MicrosoftOffice是一套由微软公司开发的办公软件套装,它可以在MicrosoftWindows、WindowsPhone、Mac系列、iOS和Android等系统上运行。

与其他办公室应用程序一样,它包括联合的服务器和基于互联网的服务。从2007版的Office被称为“OfficeSystem”而不叫“OfficeSuite”,反映出它们包括服务器的事实。

港澳台DNS服务器地址
香港:
205252144228
2081516965
202181202140
2021812242
澳门:
20217538
20217533
台湾:
168951921
1689511
国外DNS服务器地址
美国:
20867222222
20867220220
1658713129
16587201244
205171365
205171265
1984104
1984104
198326412
19233412
19220323010
19255241
192112364
1923614817
1925812830
192993
193014129
12890107
12881090
6633206206
2089610221
6633216216
205171365
205171265
1658713129
16587201244
加拿大:
20916616036
209166160132
英国:
193014129
日本
202122733
20221622818
韩国:
16412410131
20324824031
1681266360
1681266361
新西兰:
202271843
泰国:
209166160132
20244834
2024482
印度:
202138103100
202138962
国内各省市DNS服务器地址
北京:
20296199133
202960133
202106020
2021061481
2029716195
202138962
深圳:
20296134133
2029615415
广州:
6114456100
6114456101
广东:
2029612886
20296128143
上海:
20296199132
20296199133
202962095
20296209133
天津:
202999668
2029910468
广西:
2029612868
20210322468
20210322568
河南:
20210222768
20210224512
20210222468
河北:
2029916068
福建:
2021019854
2021019855
厦门:
20210110355
20210110354
湖南:
202103068
2021039668
20210396112
湖北:
202103068
2021030117
2021032468
江苏:
20210215162
202102293
20210213141
2021022435
浙江:
202961023
202969668
2029610418
陕西:
2021001311
202100416
202100415
202100068
山东:
2021021543
2021021523
20210212868
20210213468
山西:
2029919268
202991986
四川:
202989668
61139269
重庆:
6112812868
成都:
202989668
202989669
辽宁:
20298068
202967568
202967564
202966938
202968618
202968624
安徽:
20210219268
20210219968
1089645
吉林:
20298568
202981418
202981419
江西:
20210122468
2021091292
20210124036
新疆:
611289774
611289773
贵州:
2029819268
10157215
云南:
202989668
2029816068
黑龙江:
20297229133
2029722468
21915032132
海南:
20210019268
2021001998
宁夏:
202100068
2021009668
甘肃:
2021007213
内蒙古:
2029922468
青海:
20210012868
全球路由DNS服务器
全球只有13台路由DNS根服务器,在13台路由服务器中,名字分别为“A”至“M”,其中10台设置在美国,另外各有一台设置于英国、瑞典和日本。下表是这些机器的管理单位、设置地点及最新的IP地址。
名称管理单位及设置地点IP地址
A INTERNICNET(美国,弗吉尼亚州) 1984104
B 美国信息科学研究所(美国,加利弗尼亚州) 12890107
C PSINet公司(美国,弗吉尼亚州) 19233412
D 马里兰大学(美国马里兰州) 12881090
E 美国航空航天管理局[NASA](美国加利弗尼亚州) 19220323010
F 因特网软件联盟(美国加利弗尼亚州) 19255241
G 美国国防部网络信息中心(美国弗吉尼亚州) 192112364
H 美国陆军研究所(美国马里兰州) 12863253
I Autonomica公司(瑞典,斯德哥尔摩) 1923614817
J VeriSign公司(美国,弗吉尼亚州) 1925812830
K RIPE NCC(英国,伦敦) 193014129
L IANA (美国,弗吉尼亚州) 198326412
打开CSDN APP,看更多技术内容
Swoole系列26Redis 服务器_码农老张Zy的博客
服务端的意思是一个可以提供服务的应用,redis-server 才是我们最熟悉的那个 Redis 的服务端。 那么在Swoole中,这个 Redis 服务端是个什么东西呢其实它是一个基于 Redis 协议的服务器程序,可以让我们使用 Redis 的客户端来连接这个服务
继续访问
内网服务器,同时内网用户实现通过公网地址访问内外那个服务器
在实际应用中,路由器作为联网设备,wan口接运营商(唯一一个公网地址),内网口(作为网关)接内网,内部有一台服务器,面向所有用户。内网IP地址19216821(g0/0/2), 外网IP地址:2191468442(g0/0/1),服务器ip192168212 (2)客
继续访问
国内外DNS大全
你还在为上网找不到dns而发愁吗? 港澳台DNS服务器地址 香港:20525214422820815169652021812021402021812242 澳门:2021753820217533 台湾:1689519211689511 国外DNS服务器地址 美国: 
继续访问
免费公共DNS服务器IP地址大全
国内常用公共DNS 114 DNS: (114114114114;114114115115) 114DNS安全版(114114114119;114114115119) 114DNS家庭版(114114114110;114114115110) 阿里 AliDNS: (223555;223666) 百度 BaiduDNS(新增ipv6地址
继续访问
网络显示服务器,服务器网络-什么是网络中所说的服务器
“床”就是保证你和老婆所有程序都能正常运行的服务器。 当然极个别情况除外 去网络手册中查即可知道答案! 服务器干什么用的 从广义上讲,服务器是指网络中能对其它机器提供某些服务的计算机系统(如果一个PC对外提供ftp服务,也可以叫服
继续访问
rp魔兽那个服务器人最多,《魔兽世界》怀旧服RP服务器介绍 什么是
在这里,有着绅士的圣骑士,阴冷孤僻的盗贼,粗狂豪迈的战士,平衡自然的德鲁伊。当然,这一切都不是必须的,因为在RP服务器中最重要的是你对角色的理解,以及你的扮演。即使是在阴暗处活动的盗贼也可以表现的像一个优雅的绅士,只要你能够自
继续访问
网易dns劫持检测,dns被劫持检测方法有哪些?
1、遇到这种情况,首先是先看看其它人的电脑或手机等设备连接网络是否正常,是 2、电脑重启后还不行,可以尝试将自己的DNS地址固定为一些免费的、速度比较快的 DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取 2、IIS7网站监控可以及时防控网站风险,快速准确监控网站是否遭到各种劫持攻击,网站在全国是否能正常打开(查看域名是否被墙),精准的DNS污染检测,具备网站打开速度检测功能,第
继续访问
各地的ADSL MODEM VPI、VCI 和DNS的信息
广西 0 35 dns 20210322468 北京 0 35 DNS 202106196115 广东中山 0 35 DNS : 2029612868 湖南 0 35,DNS:2119824 福建,0 200 ,DNS:2021019855和2021019854 云南 0 35 dns:61166150101 广东湛江 0 80 浙江杭州 8/35  0/
继续访问
web服务器基于那个协议,基于>

运维人员的工作每天基本上都是在检查问题,枯燥但又重要, 要是你的某一个环节出现问题并没有及时发现问题,对于企业来说损失可能非常大,基本上运维人每天的工作我罗列了下,有这几种:

1、负责服务器的硬件配置、软件安装、机房上下架等技术维护工作

2、负责虚拟化技术产品物理机配置、管理和日常运行监控和维护

3、负责独立主机或虚拟应用产品的开通使用、日常维护、故障诊断和排除

4、提供独立主机或虚拟应用客户产品 *** 作和应用方面的技术支持

5、监视分管的服务器,及时发现问题,并积极解决问题

现在信息化数字时代,单靠人工去检查出现错误几率会很大,而且有的运维人还不只管理两台服务器,像我们公司的运维每人至少要管理30台服务器,这样子单靠人工运维耗费的人工成本和时间是非常大的,所以还是推荐你用运维工具吧,比如云帮手()

1支持跨云商批量管理服务器

2兼容性强大,兼容市面基本所有的云商云主机,兼容 *** 作系统;

3 *** 作简单,可视化界面预览资源、一键修复、一键部署;

4 可以远程登录云主机FTP桌面,处理云主机上的文件;

5监控和资源还有告警功能,这个是挺好的,不用盯着看;

6系统修复功能,这个是挺实用也比较必须的;

7免费使用。总得来说功能还是挺全的,不存在需要又要另外找软件的尴尬。

你好,很高兴回答你这个问题。从运维的角度来讲,服务器的数量少并不意味着我们的运维工作就非常轻松,相反我们更应该重视此阶段的工作。

我们可以从以下几方面来开展我们的运维工作:

1应用服务器

我们可以从当前服务器中找出 至少2个节点装Vsphere虚拟化,建立一个数据中心、集群 ;如果你的服务器有多网卡和SCSI,还可以做一些更高级的应用,如vmotion、负载均衡、高可用等。当虚拟机或服务器故障,可以 实现故障自动转移,有效的避免了单节点的故障,提供服务器的容错率

我们可以在新建的虚拟机部署Web、API等各种应用,而且 虚拟机可以在vCenter图形化界面下统一管理 。这一般是中小公司的在服务器方面的解决方案。

当然,我们对docker比较熟悉,可以使用一套docker解决方案,这比Vsphere更能节省一部分资源。当然这个需要的技能要求也比较高,需要我们不断积累。


2数据库服务器

数据库服务器在此我们单独拿出来,是因为数据库对服务器性能、磁盘IO要求比较高,不太建议使用虚拟机,当然这需要根据业务的实际情况来做选择。 数据库我们需要通过一主一从、一主二从的方式实现高可用,来避免数据库单点问 题,我们还可以选择合适的proxy来进行读写分离、读负载均衡等。另外还要考虑数据的本地备份、异地备份,来确保数据可恢复。


3系统监控

当我们在应用服务器和数据库服务器上线一套系统后, 我们需要通过监控掌握从服务器硬件、基础状态、应用、数据库等从下到上的运行状态 ,以便我们能够对告警及时做出响应。考虑到报警的及时性,我们需要监控接入多种报警渠道,如微信、钉钉、邮件、短信等。监控的目的是发现问题、解决访问,因此我们需要踏实的做好这一步,才能为我们的业务保驾护航。


好了,其实不管服务器多少,我们都需要扎实的把基础打好,这样才能以不变应万变面对各种情形。希望我的回答能够帮到你。



题主没有详细说明具体应用系统的功能,比如是否单一的Web服务?有没有微服务、分布式、集群化扩展的潜在需求?

通常来说,建议使用云服务自动化运维。云服务已经成为IT技术的核心基础设施,充分利用云服务带来的d性和分布式优势,赋能自动化运维。

一,自动构建系统

如果需要构建应用,那么就建议配置使用CI/CD持续化集成和自动化部署,比如常用的Jenkins,配置Git代码提交时触发构建,然后自动部署。

二,日志收集处理系统

1,ELK是常见的日志收集管理系统,包括ElasticSearch, LogStash, Kibana三个服务,架构示意图如下:

2,在ELK系统中,Kibana是一个图形化展示工具,配置查询条件,运维人员随时可以搜索指定日志信息,分析处理故障。

三,服务监控

1,云监控CloudMonitor

主流云服务商都将监控功能集成到了基础架构中,以阿里云为例,云监控提供了多种配置,多维度全方位监控。


比如配置CPU使用率到达80%时,自动触发动作,增加服务器实例,同时邮件通知运维人员。

2,应用监控

以监控宝为例,配置服务地址,选择分布在不同地区和运营商的监测点。当监测点不能正常调用配置的服务地址时,将收到警告信息,可以选择邮件、短信、电话等通知方式。


四,潜在的系统扩展需求

1,是否集群化部署?需要AutoScaling自动伸缩吗?

小型化和集群化并不冲突。如果采用集群化部署,可以配置触发条件,满足时自动增加或者释放服务器资源。比如当CPU使用率达到75%或者内存占用率达到75%时,根据配置好的服务器和数量,自动触发。

2,是否使用Docker容器技术?

Docker将应用以及依赖打包到一个可移植的镜像中,可以实现虚拟化,有助于快捷高效的交付应用,结合Docker-compose资源编排,快速实现自动部署更新,不再需要常用的Jenkins构建服务器。

机器数比较小的话,你可以用云的服务器,这样可以节省好多钱。找一个专门的运维,还不如让开发自己来搞,因为机器少运维他也应付得过来。现在都在搞云计算了,把你的机器放上阿里云或者腾讯云,你自己维护好很多,包括网络贷款都很容易扩容。上面这个我说到的只是说建议你如果你已经是自己的机器了。我建议你从我下面所说的来搞。

认为的整个过程的话一般分为三个阶段,第一的话是手工阶段,什么东西都是手工搞。

第2个阶段就是脚本阶段了,本来手工搞的东西全部脚本化。

第3个阶段就是平台化了,平台化了之后,所有东西都在页面上完成系统完成,不需要人工来干预,甚至不用运维来搞。

有一些人说既然认为就是最后的一个阶段,但是这个很不成熟。所以我就不说了。

针对你这个机器数少的,你可以手工认为,或者说用脚本认为都没问题。

在合适的阶段做合适的事情就是最好的。所以我建议你手工运维或者脚本运维。

我们项目用的 wgcloud运维监控系统 ,它前身是开源项目,后来推出的商业版,也有免费版

wgcloud运行很稳定,性能很好,部署和上手容易

wgcloud支持主机各种指标监控(cpu状态/温度,内存状态,磁盘容量/IO,硬盘smart监控,系统负载,网卡流量,硬件系统信息等),数据可视化,进程应用监控,大屏可视化,服务接口检测,DOCKER监控,自动生成网络拓扑图,端口监控,日志文件监控,web SSH(堡垒机),指令下发执行,告警信息推送(邮件钉钉微信短信等)





可以装虚拟机代替,在同一个局域网情况下

找服务商外包服务,或者网上托管也不贵收费

服务器数量比较少,比如10台服务器,基本可以不设置运维岗位了,后端开发人员 或者架构师就能搞定。

我就是那种曾经在创业的小公司待过的开发人员,开发,运维我都干了。

但是想想如何更科学更高效的运维还是很有必要的。


运维的目的

软件系统的运行时环境:即公司的业务产线,靠它创造业务价值,这个是最核心的功能诉求。


实时监控系统: 任何时候都要对当前公司的产线的压力一清二楚,有问题功能随时解决,有性能问题及时扩容或者回收资源


降低服务器成本:在业务萎缩的情况下,准确评估哪些资源可以回收,降低服务器的支出


这个是当时我认为的运维的三个主要目的。

运维方案

开发半路出家,当时采用的是shell+python+ansible+jekins+elk的方式

首先,我会及时的更新业务产线的物理架构图,根据架构图来规划服务器的资源使用。

比如多少个web服务,数据库多少,zk,kafka,redis集群怎么分布。

集群部署一般是放在多个服务器上的,这个时候ansible就派上用场了。

jekins主要用来自动发布更新程序已经做定时回收磁盘的任务。

elk主要用来做应用的日志系统和监控告警; 可以通过看板随时知道产线的请求数量和并发数量;


以上的运维方案适用于小公司。运维工程师看到了可以补充

搞个zabbix刷

数量少。如果配置好可以虚拟化。然后跑容器


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/13096911.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-30
下一篇 2023-05-30

发表评论

登录后才能评论

评论列表(0条)

保存