第十一章 分布式应用程序

728 篇文章 1 订阅
86 篇文章 0 订阅

第十一章分布式应用程序

 

使用网络的应用程序,称为分布式应用程序(distributed applications),现在,已经越来越重要。幸运的是,.NETBCL 和其他的库提供了许多结构,使得通过网络通信变得容易,进而,用 F# 创建分布式应用程序也是很简单。

 

 

网络概述

 

已有几类分布式应用程序,通常分为:客户端-服务器(client-server)应用程序,其中客户端向中央服务器的请求;点对点应(peer-to-peer)用程序,萨满教这里,计算机之间相互交换数据。这一章,我们将重点学习客户端-服务器应用程序,由于这是目前更常见的。

不管你想创建哪种分布式应用程序,计算机之间的数据交换都是由协议控制的。协议(protocol)是一种标准,定义了通过网络进行通信的规则。

构建网络应用程序通常考虑的一项最具挑战性的任务,程序员有好的理由才可以执行。当创建应用程序时,必须考虑三个重要需求:

可伸缩性(Scalability):应用程序被许多用户并行使用时,必须保持响应。通常,这就需要广泛地测试与分析服务器代码,保证能在高负载下的执行。

容错(Fault tolerance):网络本来就不可靠,因此,写的代码不应该假定网络永远是好的;如果你这样做了,应用程序对于最终用户来说可能是令人沮丧的。每个应用程序都应尽力保证通信错误能够顺利处理,给用户适当的反馈,显示出错信息,也可提供诊断和重试的机会,不要因为网络故障而使应用程序崩溃;还应该考虑数据的一致性(即,能够保证所有必须的更新在到达目标计算机时保持数据一致吗?),使用事务(transactions)和关系型数据库存储数据可以帮助做到这一点。根据应用程序的类型不同,也可以考虑种离线模式,为用户提供访问本地数据的能力,当网络以后可用时,再响应网络请求。是大多数的电子邮件的客户端都提供了这种离线模式。

安全(Security):每个应用程序都有安全的问题,但是,在网络编程中安全极其重要。这是因为,一理把应用程序公开到网络上,也就开放了,网络上的所有用户可以攻击;因此,如果应用程序公开到互联岗上,就会有数千甚至上百万的潜在攻击者。通常,需要考虑的包括,需要跨网络传输的数据安全,签名保证它不被篡改,或者加密确保只有适当的人可以读;也要保证连接到应用程序的人经过认证和授权,知道他是谁,想做什么。

幸运的是,现代程序员不需要自己动手,而是由网络协议帮助解决这些问题。例如,如果我们想发送的数据很重要,不希望网络其他人读取,我们并不需要自己来加密数据,相反,应使用网络协议提供的功能。这些协议以库中的组件形式公开,为我们实现了这些功能。协议的类型、使用的库,由应用程序的需求决定。有些协议提供了加密和认证,而有些则没有;有些是用于客户端服务器应用程序,而有些适用于点对点应用程序。在这一章,我们将学习下面的组件和库,以及它们所实现的协议:

TCP/IP 套接字(sockets:):为应用程序(客户端服务器、点对点)提供了大量的网络传递控制;

HTTP/HTTPS 请求:支持网页向服务器的请求,通常只为客户端服务器应用程序;

网站服务:公开应用程序,使其他应用程序可以请求服务,通常只为客户端服务器应用程序;

Windows 通信基础(WindowsCommunication Foundation,WCF):扩展网站服务,为现代程序员提供更多功能支持,包括但不限于,安全性、事务,同时为客户端服务器、点对点应用程序。

这些协议是彼此相接的,TCP/IP 是最低层的编程接口(API),Windows 通信基础是最高层的编程接口,网站服务是独立于Windows 通信基础的,但是,由于Windows 通信基础也实现了网站协议,因此,可以认为网络服务是Windows 通信基础的子集。图 11-1 是这些协议彼此关系的概览。


图 11-1 .NET 网络编程应用程序接口概览

[ 这个图也太寒碜了,可能是从视频上截下来的吧 ]

 

尽管分布式编程天生具有挑战,不这,通常还是值得学习的,因为它可能够访问我们感兴趣的数据,与其他人共享我们程序的结果。到本章结束,我们就能写出这样的程序,包括客户端服务器式聊天程序,读 RSS(称为简易信息聚合,或聚合内容)订阅,访问保存在谷歌电子表格中的数据,在推特(Twitter)上找出所有的朋友,以及创建网站服务和Windows 通信基础服务。

在网络上提供用户界面的简单方法是开发网站应用程序,网站应用程序不在这里讨论,可以参考第八章的“ASP.NET”一节。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Systems Programming: Designing and Developing Distributed Applications explains how the development of distributed applications depends on a foundational understanding of the relationship among operating systems, networking, distributed systems, and programming. Uniquely organized around four viewpoints (process, communication, resource, and architecture), the fundamental and essential characteristics of distributed systems are explored in ways which cut across the various traditional subject area boundaries. The structures, configurations and behaviours of distributed systems are all examined, allowing readers to explore concepts from different perspectives, and to understand systems in depth, both from the component level and holistically. Explains key ideas from the ground up, in a self-contained style, with material carefully sequenced to make it easy to absorb and follow. Features a detailed case study that is designed to serve as a common point of reference and to provide continuity across the different technical chapters. Includes a ‘putting it all together’ chapter that looks at interesting distributed systems applications across their entire life-cycle from requirements analysis and design specifications to fully working applications with full source code. Ancillary materials include problems and solutions, programming exercises, simulation experiments, and a wide range of fully working sample applications with complete source code developed in C++, C# and Java. Special editions of the author’s established ‘workbenches’ teaching and learning tools suite are included. These tools have been specifically designed to facilitate practical experimentation and simulation of complex and dynamic aspects of systems. Table of Contents Chapter 1. Introduction Chapter 2. The process view Chapter 3. The Communication View Chapter 4. The resource view Chapter 5. The architecture view Chapter 6. Distributed systems Chapter 7. Case studies: putting it all together
### 回答1: 很高兴为您回复。Spark SQL是Spark生态系统中的一个模块,它提供了一种基于结构化数据的编程接口。Spark SQL支持多种数据源,包括Hive表、Parquet文件、JSON文件等。在Spark SQL中,可以使用SQL语句或DataFrame API来查询和操作数据。Spark SQL还支持用户自定义函数(UDF)和聚合函数(UDAF),可以方便地扩展功能。在Scala中,可以使用SparkSession对象来创建Spark SQL应用程序。SparkSession提供了许多方法来读取和写入数据,以及执行SQL查询。Spark SQL还支持分布式执行,可以在集群中处理大规模数据。 ### 回答2: Spark SQL 是 Spark 对结构化数据处理的一个模块,它提供了一个分布式 SQL 引擎,并支持从多个数据源中读取并处理数据。Scala 是 Spark 支持的编程语言之一,它提供了强大的函数式编程特性,可以方便地处理大数据量。在本章中,我们将探讨如何使用 Spark SQL 进行结构化数据处理。 一、Spark SQL的概念 Spark SQL 是基于 DataFrame 的 SQL 引擎,它能够将多种数据源转换为 DataFrame,并通过 SQL 或者 DataFrame API 进行数据操作与分析。Spark SQL 支持的数据源包括 Hive 表、Parquet、JSON、CSV、JDBC 等多种格式。Spark SQL 可以与所有 Spark 生态工具进行集成,例如 Spark MLlib、GraphX 等。 二、Spark SQL的特性 1. 高性能引擎 Spark SQL 可以利用 Spark 的分布式计算模型,在大规模数据处理时显著提高性能。相比于传统的 SQL 引擎,Spark SQL 采用了列式存储,减少了 I/O 操作,能够更快地完成数据的处理与分析。 2. 强大的数据源支持 Spark SQL 支持读取多种数据源,包括 Hive 表、Parquet、JSON、CSV、JDBC 等多种格式。同时,Spark SQL 也支持将数据导出为多种格式,例如 Parquet、JSON、CSV 等。 3. 兼容性强 Spark SQL 支持 ANSI SQL 标准,所以能够与大部分 SQL 工具进行兼容。同时,Spark SQL 还支持使用 HiveQL 进行查询,可以兼容 Hive 的语法。 4. 常用的操作函数 Spark SQL 提供了一些常用的操作函数,例如 avg、sum、count、min、max 等,方便进行数据处理与分析。 三、Spark SQL的使用 Spark SQL 的使用主要可以分为三个步骤: 1. 将数据源转换为 DataFrame Spark SQL 支持读取多种数据源,通过调用相应的读取 API,可以将数据源读取为 DataFrame。 val df = spark.read.json("file:///path/to/json") 2. 执行 SQL 查询 Spark SQL 支持执行 ANSI SQL 标准的查询,通过调用 DataFrame 的 sql 方法,可以执行 SQL 查询。 df.createOrReplaceTempView("people") val result = spark.sql("SELECT name, age FROM people WHERE age > 20") 3. 将结果导出为数据源 Spark SQL 支持将查询结果导出为多种格式,例如 Parquet、JSON、CSV 等。 result.write.parquet("file:///path/to/parquet") result.write.json("file:///path/to/json") 总之,Spark SQL 是一个高效、强大、兼容性强的 SQL 引擎,在大规模数据处理场景下具有很好的应用价值。熟练掌握 Spark SQL 的 API 和实战技巧,能够有效地提高工作效率和数据分析能力。 ### 回答3: Spark SQL是一种分布式数据处理引擎,它是Apache Spark的一个模块,提供了一种更高层次的数据处理方式,通过Spark SQL可以使用SQL语句对数据进行查询、过滤和统计等操作,同时spark SQL还包含DataFrame和DataSet两种API,可以很方便地进行RDD与SQL之间的数据转换。 一、DataFrame DataFrame是一种以表格形式表示的分布式数据集,它与关系型数据库中的表非常相似,每行数据有一个相同的结构,每列数据都有一个名称并且数据类型相同,通过DataFrame可以很方便地进行数据的查询、过滤和聚合等操作。可以使用类似SQL的语法对DataFrame进行查询,对于DataFrame内部元素的类型,Spark SQL支持基本数据类型,数组和结构体,还支持通过UDF在数据集中添加新列。同时,DataFrame的数据可以很方便地转换为RDD进行复杂的计算。 二、DataSet DataSet是一个分布式的数据集,与DataFrame类似,但是它具有类型参数化的特性,并支持更多的编译时检查。由于有了类型参数化的特性,DataSet可以支持更多的面向对象的操作,可以对DataSet进行面向对象的映射、过滤和聚合等操作。 三、Spark SQL使用 Spark SQL使用非常简单,首先需要构建SparkSession对象,SparkSession是DataFrame和DataSet的创建入口,可以使用它来读取数据、创建数据集、执行SQL查询等操作。 SparkSession支持不同的数据源,包括Hadoop的文件系统,Hive表和外部数据源等,可以使用SparkSession.read方法读取数据,并将其转换为DataFrame或DataSet类型。在使用Spark SQL进行数据分析时,可以使用spark.sql方法执行SQL语句,API提供了大量的操作函数,能够对DataFrame或DataSet进行过滤、聚合和操作等操作,在复杂数据处理中非常实用。 总的来说,Spark SQL是Apache Spark的一个重要模块,提供了一种简单、高效的分布式数据处理方式,它的DataFrame和DataSet API可以很方便地对大量数据进行查询和分析,并且相比于RDD更容易理解和操作。通过Spark SQL可以有效地处理和分析海量数据,并为实现机器学习、深度学习和数据挖掘等应用提供了强有力的支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值