Practical file On Cloud Computing (CS-711) Session 2023-2024 Submitted By: Submitted to: Name: A vinash Hanish Thakur Mr. Mukesh Kumar 21021300 Roll No: 20011303007 6 Semester: 7th Course: Btech (CSE) Department of Computer Science & Engineering Himalayan Group of Professional Institutions Kala Amb, HP (173030) 1 INDEX S.No. EXPERIMENTS PAGE 1. Introduction to cloud computing. 3-5 2. Creating a Warehouse Application in Sales Force.com. 6-9 3. Creating an Application in SalesForce.com using Apex programming Language. 10 - 15 4. Implementation of SOAP Web services in JAVA Applications. 16 - 19 5. Implementation of Para-Virtualization using VM Ware‗s Workstation/ Oracle‗s Virtual Box and Guest O.S. 20 - 21 6. Installation and Configuration of Hadoop. 22 - 26 7. Create an application (Ex: Word Count) using Hadoop Map/Reduce. 27 -31 8. Case Study: PAAS(Facebook, Google App Engine). 32 - 33 9. Case Study: Amazon Web Services. 34 - 35 2 DATE REMARKS EXPERIMENT – 1 AIM - Introduction to cloud computing. • Overview: Cloud computing is a paradigm that enables the delivery of computing services, including servers, storage, databases, networking, software, analytics, and intelligence, over the internet. Instead of owning and maintaining physical hardware and software, users can access and utilize these resources on a pay-as-you-go basis, similar to a utility service. • Key Concepts: 1. Service Models: - Infrastructure as a Service (IaaS): Virtualized computing resources (e.g., virtual machines, storage) are provided over the internet. - Platform as a Service (PaaS): Tools and services for application development, hosting, and deployment are offered without the need to manage underlying infrastructure. - Software as a Service (SaaS): Software applications are delivered over the internet on a subscription basis. 3 2. Deployment Models: - Public Cloud: Resources are owned and operated by a third-party cloud service provider and made available to the general public. - Private Cloud: Resources are used exclusively by a single organization, either managed internally or by a third-party provider. - Hybrid Cloud: Combines public and private clouds, allowing data and applications to be shared between them. 3. Advantages of Cloud Computing: - Cost-Efficiency: Pay only for the resources used. - Scalability: Easily scale resources up or down based on demand. - Flexibility and Accessibility: Access resources from anywhere with an internet connection . - Reliability and Redundancy: Cloud providers often offer high levels of reliability and redundancy. 4 • Major Cloud Service Providers: - Amazon Web Services (AWS): Leading cloud service provider offering a vast range of services, including EC2 (IaaS), Lambda (serverless computing), and S3 (object storage). - Microsoft Azure: Comprehensive cloud platform with services like Azure Virtual Machines, Azure App Service (PaaS), and Azure SQL Database. - Google Cloud Platform (GCP): Provides services such as Compute Engine (IaaS), App Engine (PaaS), and BigQuery (analytics). • Applications: - Enterprise Resource Planning (ERP): Cloud-based ERP systems like SAP S/4HANA enable organizations to manage business processes and data in the cloud. - Customer Relationship Management (CRM): Salesforce.com, a SaaS CRM platform, helps businesses manage customer relationships and sales processes. - Collaboration Tools: Cloud-based collaboration tools like Microsoft 365 and Google Workspace facilitate teamwork and document sharing. - Content Delivery: Content delivery networks (CDNs) like Akamai leverage cloud infrastructure to efficiently deliver web content. 5 EXPERIMENT – 2 AIM - Creating a Warehouse Application in Sales Force.com • Types of Applications in SFDC :In Salesforce.com, we have two types of Applications they are 1. Classic Apps and 2. Lightning Apps. In Salesforce we can create, manage and customise both applications according to user requirement. • PROCEDURE :- # Step 1: Log into your developer # Step 2: Click the Setup Link (upper-right corner). 6 # Step 3: In the Left Navigation, Platform tools, then click App Manager # Step 4: Click New Lightning App # Step 5: After Next, define the fields for the custom app. • App Label: Search Service. • App Name: Search Service. • Description: Search Service is one app where we manage all the business data and catalogues. 7 # Step 6: Choose the Image Source for the Custom App Logo. Note: Before inserting an image for the logo you need to use the following procedure to add an image to the image gallery. # Step 7: Select Console Option # Step 8: Select a utility item 8 # Step 9: Select any of the user profiles. Then Click Save &Finish # Step 10: A new app will be created and displayed # RESULT: Thus, creating a Warehouse Application in SalesForce.com is successfully created. 9 EXPERIMENT – 3 AIM - Creating an Application in SalesForce.com using Apex programming Language. Software / Hardware Requirements: OS - Windows / Ubuntu, Google Chrome. • Theory: • 1. Salesforce: Salesforce is a cloud computing service as a software (SaaS) company that specializes in customer relationship management (CRM). Salesforce's services allow businesses to use cloud technology to better connect with customers, partners and potential customers. The software has become the number one for customer success and helps businesses track customer activity, market to customers and many more services. 2. Salesforce Lightning: Lightning (Salesforce Lightning) is a component-based framework for app development from Salesforce.com that is designed to simplify processes for business users, who typically do not have programming experience. Lightning comprises the collection of tools and technologies behind a significant upgrade to the Salesforce1 Platform (now known as App Cloud), the company's mobile app development platform. • Lightning features: Experience, a graphical user interface (GUI) that is optimized for speed. Lightning App Builder, which provides drag and drop capacities to facilitate app creation and customization. Lightning Component Framework, which includes tools and extensions that enable the development of reusable components and standalone apps and customization of the Salesforce1 Mobile App. AppExchange for Components, which makes over 50 partner components available in the App Builder. 10 Design System, which offers style guides and user experience (UX) best practices for app development. Lightning Connect, an integration tool that makes it easier for Force.com apps to consume data from any external source that conforms to the OData specification. • Steps of execution: Step1: Login into Salesforce Developer account. 11 12 13 14 Code: EmailManager.apxc public with sharing class EmailManager{ public void sendMail(String [] addresses, String [] subjects, String [] messages) { Messaging.SingleEmailMessage [] emails = new Messaging.SingleEmailMessage[]{}; Integer totalMails = addresses.size(); for(Integer i=0; i < totalMails; i++){ Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage(); email.setSubject(subjects[i]); email.setToAddresses(new List<String> { addresses[i] }); email.setPlainTextBody(messages[i]); emails.add(email);} Messaging.sendEmail(emails);}} Type the below code in debugger console: String address =’palakrathi09@gmail.com’; String subject = 'Speaker Confirmation'; String body = 'Thank you for speaking at the conference.'; String[] addresses = new String[]{}, subjects = new String[]{}, messages = new String[]{} ;addresses.add(address); subjects.add(subject); messages.add(body); EmailManager em = new EmailManager(); em.sendMail(addresses, subjects, messages); Conclusion: Hence we have created an application using Salesforce lightning platform using Apex programming language. 15 EXPERIMENT - 4 AIM - Implementation of SOAP Web services in JAVA Applications. Soap Webservices in java can be developed in may ways. We will be using Apache Axis that is integrated in the Eclipse and provide quick and easy way to transform a application into Java Web Service and create client stubs with test JSP page for testing purpose. Implementing SOAP web services in Java involves creating a service and exposing it over the internet, as well as creating a client to consume the web service. Below is a step-by-step guide: # Step 1: Set Up Your Development Environment Ensure you have the following prerequisites: - Java Development Kit (JDK) installed. - Integrated Development Environment (IDE) like Eclipse or IntelliJ. # Step 2: Create a Java Project Open your IDE and create a new Java project to organize your work. # Step 3: Define the Web Service Create a Java class that will serve as the web service. Annotate the class with `@WebService` to indicate that it is a web service. Annotate the methods you want to expose as web service operations with `@WebMethod`. 16 ```java import javax.jws.WebMethod; import javax.jws.WebService; @WebService public class MyWebService { @WebMethod public String sayHello(String name) { return "Hello, " + name + "!"; } } ``` # Step 4: Publish the Web Service Create a class with a `main` method to publish the web service. Specify the address where the web service will be available. ```java import javax.xml.ws.Endpoint; public class WebServicePublisher { public static void main(String[] args) { // Specify the address where the web service will be available String address = "http://localhost:8080/mywebservice"; // Create an instance of the web service class MyWebService myWebService = new MyWebService(); 17 // Publish the web service at the specified address Endpoint.publish(address, myWebService); // Print a message indicating that the web service is published System.out.println("Web Service is published at: " + address); } } ``` # Step 5: Run the Web Service Run the `WebServicePublisher` class. This will start the web service and make it accessible at the specified address. # Step 6: Create a SOAP Client Create a separate Java project or class to act as a SOAP client. Use JAX-WS APIs to generate client artifacts from the published WSDL. ```java import javax.xml.namespace.QName; import javax.xml.ws.Service; import java.net.URL; public class WebServiceClient { public static void main(String[] args) throws Exception { // Specify the URL of the WSDL document URL wsdlUrl = new URL("http://localhost:8080/mywebservice?wsdl"); // Specify the qualified name of the service 18 QName serviceName = new QName("http://example/", "MyWebServiceService"); // Create a Service instance using the WSDL document and qualified name Service service = Service.create(wsdlUrl, serviceName); // Extract the port interface MyWebService myWebService = service.getPort(MyWebService.class); // Invoke the web service method String result = myWebService.sayHello("John"); // Print the result System.out.println("Response from Web Service: " + result); } } ``` # Step 7: Run the SOAP Client Run the `WebServiceClient` class. This will send a request to the web service and display the response. # Step 8: Debugging and Optimization Debug the code to identify and fix any issues. Optimize the web service for better performance if needed. By following these steps, you will have successfully implemented a SOAP web service in Java and created a client to consume it. This experiment provides hands-on experience in developing and interacting with web services using JAX-WS in the Java programming language. 19 EXPERIMENT – 5 AIM - Implementation of Para-Virtualization using VM Ware‗s Workstation/ Oracle‗s Virtual Box and Guest O.S. Para-virtualization involves modifying the guest operating system (Guest OS) to be aware of the virtualization layer. VMware Workstation and Oracle VirtualBox are popular virtualization platforms that support para-virtualization. In this experiment, we'll explore the implementation of para-virtualization using VMware Workstation as an example. The process is similar for Oracle VirtualBox. # Prerequisites: 1. VMware Workstation installed on the host machine. 2. Guest Operating System ISO image for installation. # Steps: 1. Install VMware Workstation: - Download and install VMware Workstation on the host machine. 2. Create a New Virtual Machine: - Open VMware Workstation. - Click on "File" > "New Virtual Machine." - Choose "Typical" and click "Next." - Select "Installer disc image file (iso)" and browse to your Guest OS ISO image. - Follow the wizard to complete the virtual machine creation. 3. Install Guest Operating System: - Power on the virtual machine. - Follow the installation steps for the Guest OS. - During the installation, select a custom or advanced installation to enable features related to para-virtualization. 20 4. Install VMware Tools: - After the Guest OS is installed, install VMware Tools. This package includes drivers and utilities to enhance the performance and features of the virtual machine. - In VMware Workstation, go to "VM" > "Install VMware Tools." - Follow the on-screen instructions to complete the installation within the Guest OS. 5. Configure Para-virtualization: - Para-virtualization often involves enabling specific features within the Guest OS. - For example, in Linux distributions, you might need to install and configure the `open-vmtools` package for para-virtualization. - On Windows, VMware Tools will automatically optimize certain settings. 6. Verify Para-virtualization: - Check the virtual machine settings in VMware Workstation for para-virtualization options. - Confirm that the Guest OS is recognizing and utilizing para-virtualization features. 7. Performance Testing: - Run performance tests to observe the benefits of para-virtualization. - Measure aspects like CPU usage, disk I/O, and network performance. # Notes: - Para-virtualization might have different steps depending on the Guest OS. - Ensure that your Guest OS supports para-virtualization. Some older operating systems or specific distributions may not fully support these features. - The steps for Oracle VirtualBox would be similar but may involve using "Guest Additions" instead of "VMware Tools." 21 EXPERIMENT – 6 AIM - Installation and Configuration of Hadoop. • What is Hadoop? Hadoop is a globally-used, open source software programming framework which is based on Java programming with some native code of C and shell scripts. It can effectively manage large data, both structured and unstructured formats on clusters of computers using simple programming models. The Hadoop application framework provides computation across clusters of computers and distributed storage.Hadoop is designed to scale up from single server to thousands of machines, each offering local computation and storage. Hadoop follows the master slave architecture. Installing and configuring Hadoop involves setting up a distributed computing environment for processing and storing large data sets. Below are general steps to install and configure Hadoop. Note that the specific steps might vary based on the Hadoop distribution (e.g., Apache Hadoop, Cloudera, Hortonworks) and the version you are using. # Prerequisites: 1. Java Installation: - Ensure that Java is installed on your system. Hadoop requires Java. 2. SSH Setup: - Set up passwordless SSH between nodes if you are configuring a multi-node cluster. # Steps: 1. Download Hadoop: - Visit the [official Apache Hadoop website](https://hadoop.apache.org/) or the website of your Hadoop distribution to download the latest version. 2. Extract Hadoop: - Extract the downloaded Hadoop tarball to a directory of your choice. 22 ``` tar -xzvf hadoop-<version>.tar.gz ``` - Move the extracted directory to a location where you want to store Hadoop files. ``` mv hadoop-<version> /usr/local/hadoop ``` 3. Configure Hadoop Environment Variables: - Set the necessary environment variables in the `~/.bashrc` or `~/.bash_profile` file. ``` export HADOOP_HOME=/usr/local/hadoop export PATH=$PATH:$HADOOP_HOME/bin ``` - Reload the configuration. ``` source ~/.bashrc ``` 4. Configure Hadoop XML Files: - Navigate to the Hadoop configuration directory. ``` cd $HADOOP_HOME/etc/hadoop ``` 23 - Configure `hadoop-env.sh` to set Java Home. ``` export JAVA_HOME=/path/to/your/java/home ``` - Configure `core-site.xml` for Hadoop core settings. ``` <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> </configuration> ``` - Configure `hdfs-site.xml` for HDFS settings. ``` <configuration> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration> ``` 24 5. Format HDFS: - Before starting Hadoop services, format the Hadoop Distributed File System (HDFS). ``` hdfs namenode -format ``` 6. Start Hadoop Services: - Start the Hadoop services. ``` start-all.sh ``` - Verify that the Hadoop daemons are running by accessing the Hadoop web interface at `http://localhost:50070`. 7. Run a Hadoop Example: - Run a Hadoop example to ensure everything is set up correctly. ``` hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples<version>.jar pi 16 1000 ``` 8. Stop Hadoop Services: - Stop the Hadoop services when you're done. ``` stop-all.sh ``` 25 • Notes: - The above steps provide a basic setup for a single-node Hadoop cluster. For a multi-node cluster, additional configurations are needed. - Configuration files and commands may vary based on the Hadoop distribution and version. - Ensure that firewall settings allow communication between nodes in a multi-node setup. By following these steps, you should have a basic Hadoop installation and configuration. For a more comprehensive setup or for production use, additional configurations and considerations are required. Refer to the official Hadoop documentation and resources specific to your Hadoop distribution for detailed guidance. 26 EXPERIMENT – 7 AIM - Create an application (Ex: Word Count) using Hadoop Map/Reduce. Creating a simple Hadoop MapReduce application, such as the classic Word Count example, is a great way to get hands-on experience with Hadoop. The Word Count example is a straightforward program that counts the frequency of each word in a given set of text data. Here's a step-by-step guide to implementing Word Count using Hadoop MapReduce: • Word Count MapReduce Example: 1. Prepare Input Data: - Create a text file with sample input data. For example, create a file named `input.txt` with the following content: ``` Hello Hadoop Welcome to MapReduce Hadoop is powerful MapReduce is simple ``` 2. Write Mapper Code: - Create a Java class for the Mapper. This class reads input data and emits key-value pairs, where the key is the word, and the value is 1 (indicating one occurrence). ``` import java.io.IOException; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Mapper; public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable> { 27 private final Text word = new Text(); private final IntWritable one = new IntWritable(1); @Override protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { String[] words = value.toString().split("\\s+"); for (String w : words) { word.set(w); context.write(word, one); } } } ``` 3. Write Reducer Code: - Create a Java class for the Reducer. This class receives the key-value pairs from the Mapper and sums up the values for each key. ``` import java.io.IOException; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Reducer; public class WordCountReducer extends Reducer<Text, IntWritable, Text, IntWritable> { private final IntWritable result = new IntWritable(); @Override protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException { 28 int sum = 0; for (IntWritable value : values) { sum += value.get(); } result.set(sum); context.write(key, result); } } ``` 4. Write Driver Code: - Create a Java class that serves as the driver program, configuring and running the MapReduce job. ``` import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Job; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; public class WordCount { public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); Job job = Job.getInstance(conf, "word count"); job.setJarByClass(WordCount.class); job.setMapperClass(WordCountMapper.class); job.setCombinerClass(WordCountReducer.class); 29 job.setReducerClass(WordCountReducer.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); FileInputFormat.addInputPath(job, new Path(args[0])); FileOutputFormat.setOutputPath(job, new Path(args[1])); System.exit(job.waitForCompletion(true) ? 0 : 1); } } ``` 5. Build and Package: - Compile the Java classes and package them into a JAR file. 6. Run the MapReduce Job: - Run the Word Count MapReduce job using the following command: ``` hadoop jar WordCount.jar input.txt output ``` - Adjust the file paths and names as needed. 30 7. View Output: - Check the output in the specified output directory. • Notes: - This is a basic example, and in a real-world scenario, you might need to handle additional complexities. - Ensure Hadoop is running before executing the job (`start-dfs.sh` and `start-yarn.sh`). - The provided example assumes a local Hadoop setup. For a cluster, additional configurations are needed. By following these steps, you'll have implemented a simple Word Count application using Hadoop MapReduce. This example serves as a foundation for understanding the MapReduce programming model and can be a starting point for more complex data processing tasks. 31 EXPERIMENT – 8 AIM - Case Study: PAAS(Facebook, Google App Engine) Platform as a Service (PaaS) is a cloud computing service model that provides a platform allowing customers to develop, run, and manage applications without dealing with the complexities of building and maintaining the underlying infrastructure. Two prominent examples of PaaS offerings are Facebook (as a consumer of PaaS for its apps) and Google App Engine (as a provider of PaaS services). Case Study: PaaS in Facebook 1. Background: - Facebook is a social media platform that connects people worldwide. - Facebook relies on PaaS to power its platform and offer a seamless experience to users. 2. PaaS Usage in Facebook: - Facebook uses PaaS for application development, hosting, and scaling. - PaaS allows developers to focus on coding and building features without worrying about infrastructure management. 3. Key Benefits: - Rapid Development: PaaS enables rapid development and deployment of features, facilitating Facebook's agile development practices. - Scalability: PaaS ensures that Facebook can scale its infrastructure to handle the massive user base and increasing data volume. - Reduced Complexity: Developers can leverage pre-built services and components, reducing the complexity of app development. 4. Challenges: - Vendor Lock-in: Depending on the PaaS provider, there may be concerns about vendor lockin and the ability to migrate to another platform easily. - Customization Limitations: Some PaaS platforms may limit customization options, which could be a challenge for highly specialized features. Case Study: Google App Engine 32 1. Background: - Google App Engine (GAE) is a fully managed serverless platform that allows developers to build and deploy applications without managing the underlying infrastructure. 2. PaaS Offerings by Google App Engine: - Standard Environment: Designed for applications with standard runtime environments. Developers deploy code, and GAE manages the rest. - Flexible Environment: Provides more control over the underlying infrastructure and supports multiple programming languages. 3. Key Benefits: - Automatic Scaling: GAE automatically scales applications based on demand, ensuring optimal performance. - Built-in Services: Developers can leverage built-in services like databases, caching, and authentication, reducing the need for external services. - Ease of Deployment: GAE streamlines the deployment process, allowing developers to focus on building features rather than managing infrastructure. 4. Challenges: - Runtime Limitations: In the standard environment, there might be limitations on runtime environments and available libraries. - Flexibility vs. Control: While the flexible environment offers more control, it may require additional configuration and management compared to the standard environment. • Conclusion :Both Facebook's usage of PaaS for its application development and Google App Engine as a PaaS provider highlight the advantages of PaaS in terms of rapid development, scalability, and reduced infrastructure management overhead. However, challenges such as vendor lock-in and customization limitations should be carefully considered when adopting PaaS solutions. In the evolving landscape of cloud computing, PaaS continues to play a crucial role in empowering organizations to build and deploy applications efficiently, and each PaaS provider brings its unique features and considerations to the table. Organizations need to assess their specific needs and preferences when choosing a PaaS solution. 33 EXPERIMENT – 9 AIM - Case Study: Amazon Web Services 1. Introduction: - Background: Launched in 2006, Amazon Web Services (AWS) is a subsidiary of Amazon.com, providing a comprehensive suite of cloud computing services. - Objective: This case study examines the factors contributing to AWS's success, its impact on the industry, challenges faced, and the strategies employed for sustained growth. 2. Key Success Factors: - Innovation and Service Portfolio: AWS continuously introduces innovative services, from core infrastructure like EC2 to advanced offerings such as AI/ML and IoT, meeting diverse customer needs. - Global Infrastructure: With data centers strategically positioned worldwide, AWS offers low-latency access, ensuring reliability and scalability. - Cost-Efficiency: Leveraging economies of scale as part of Amazon, AWS provides costeffective solutions, making cloud computing accessible to businesses of all sizes. - Customer-Centric Approach: AWS emphasizes customer satisfaction, actively seeking and incorporating feedback, resulting in customer loyalty. 3. Market Impact: - Market Dominance: AWS is a dominant force in the cloud services industry, maintaining a significant market share. - Competitive Landscape: While facing competition from Microsoft Azure, Google Cloud, and others, AWS sustains its leadership through constant innovation and service excellence. 4. Services and Offerings: - Core Services: AWS's core services include computing power (EC2), storage (S3), and databases (RDS), forming the foundation for various applications. - Specialized Services: AWS provides specialized services such as SageMaker for machine learning, Lambda for serverless computing, and Redshift for data warehousing, catering to diverse business requirements. 34 5. Challenges: - Data Security and Privacy: The increasing reliance on cloud services raises concerns about data security and privacy, prompting AWS to invest heavily in robust security measures. - Competition: Intense competition in the cloud services market requires AWS to stay agile and innovative to maintain its competitive edge. 6. Impact on Businesses: - IT Transformation: AWS has played a pivotal role in transforming IT operations for businesses, enabling them to migrate to the cloud, reduce infrastructure costs, and enhance scalability. - Innovation and Agility: Businesses leveraging AWS experience increased innovation and agility, fostering a culture of experimentation and rapid development. 7. Future Outlook: - Continued Innovation: AWS is expected to continue innovating, adapting to emerging technologies such as edge computing, quantum computing, and advanced AI. - Global Expansion: As the demand for cloud services grows globally, AWS may expand its data center footprint to new regions. 8. Conclusion: - Success Factors: AWS's success can be attributed to continuous innovation, a diverse service portfolio, global infrastructure, cost-efficiency, and a customer-centric approach. - Industry Impact: AWS has not only shaped the cloud computing industry but has become synonymous with reliable and scalable cloud solutions, influencing how businesses approach technology and IT infrastructure. This case study highlights Amazon Web Services as a trailblazer in the cloud computing space, showcasing how its strategic decisions, customer-centric focus, and commitment to innovation have propelled it to the forefront of the industry. Despite challenges, AWS remains a driving force in shaping the future of technology infrastructure and services. 35