Python大数据架构全栈开发与应用
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.3.3 技术架构

技术架构关注的对象是数据系统的技术支持和实现。技术架构设计主要解决以下4个问题。

• 系统核心技术框架是什么,不同类型的框架如何集成使用。

• 为了保障逻辑功能的实现,需要哪些技术组件的支持和配合。

• 当前技术框架、库、组件未来的迁移或升级路线、策略是什么。

• 技术架构的落地如何与物理架构相匹配。

按照技术的应用场景差异,技术架构可以分为采集同步层、存储层、处理计算层、应用层、系统管理层。

1.采集同步层

采集同步层对应的是数据的采集和同步,常用技术如下。

• 爬虫:Python爬虫技术应用较广泛,经常用到的库包括Requests、BeautifulSoup、Selenium、PyQuery,框架包括Pyspider、Scrapy等。

• 日志采集同步:日常采集包括第三方采购产品及自采日志两种方式。第三方采购产品包括Google Analytics、Adobe Analytics、百度统计等,自采日志技术包括ELK(ElasticSearch、Logstash和Kiabana)套件、Flume、Kafka等中间处理组件。

• 文件和数据库(包含关系数据库和NoSQL数据库)同步:常用技术组件或实现方式包括数据库自带的同步机制、Canal、Bulk事务管理、DataX、Sqoop、Debezium、Bireme、Kettle及数据API等。

• 消息队列:既可以用来传输日志,又可以用来做多系统间的消息同步,常用技术组件包括ActiveMQ、RabbitMQ、ZeroMQ、RocketMQ、Kafka、Redis等。

2.存储层

• 关系数据库:包括SQLite、MySQL及MariaDB、Oracle、SQLServer等。

• NoSQL数据库:包括各种硬盘持久化存储、内存存储、缓存及其上层的查询引擎,常用技术组件包括Hive、Impala、Presto、Drill、Phonix、HAWQ、HBase、Cassandra、Redis、Memcached、ElasticSearch(ES)、Solr、Lucene、Neo4J、MongoDB、CouchDB、Faiss、Milvus等。

• 数据湖仓:包括Delta Lake、Hudi、Iceberg等。

• 文件和二进制对象存储:在开源且成熟的文件存储领域,HDFS应用最广;除此之外的商用方案比较多,如阿里云的OSS、AWS的S3、Azure的Blob等。

3.处理计算层

• 批处理:一般都是分布式框架,市场主流的批处理框架是Hadoop的MapReduce和Spark。另外,Flink框架由于具有流批一体的属性,因此也可以应用到批处理场景中。

• 流处理:常用技术框架包括Flink、Storm和Spark Streaming(如果没有特殊说明,那么本书中的Spark Streaming默认指代的是Spark Structured Streaming)3类。

• 图计算:用于网络和关系场景的计算,主要技术包括Graphx、igraph。

• 人工智能:用于数据价值的深度挖掘,主要技术包括TensorFlow、PyTorch、Spark ML、Flink ML、Mxnet、PaddlePaddle、CNTK等。

4.应用层

• 数据挖掘与数据分析:主要用于自主式的决策分析场景。目前,Python是这一领域的主要程序和语言,主要技术或库包括SciPy、Pandas、NumPy、Statsmodels、Gensim、Imblearn、结巴分词、Scikit-learn、LightGBM、XGBoost等。

• Web产品和报表开发:用于报表分析支持,常用技术包括Superset、Django、Flask等。

• 图表可视化:数据和结果的可视化,常用技术包括ECharts、HCharts、D3.js等。

• API开发:以API的方式对外提供统一服务,常用技术包括Flask、Django REST Framework、FastAPI、Hug等。

• Web服务部署:保障Web服务的高性能、高并发性、高可用性和稳定性等,常用技术包括WSGI、Nginx、Gunicorn、Gevent、Supervisor等。

5.系统管理层

• 系统测试:针对接口、压力、Web页面功能等的测试,常用技术包括Selenium、Appuim、Playwright、Locust、Unnitest等。

• 任务调度:包括单一任务和工作流任务的调度,常用技术包括Crontab、APScheduler、Azkaban、Airflow等。

• 系统监控:针对网络、集群、服务器等对象的状态、用量、响应、可用情况等方面的监控,常用技术包括Psutil、Paramiko、Fabric等。

• 资源统一管理:为分布式应用程序提供资源隔离、共享、部署、管理等功能,常用技术包括YARN、Mesos等。

• 系统部署:实现系统或应用程序的部署,常用技术包括Ansible、Docker、K8s(Kubernetes)等。