1 copyright © 2012, oracle and/or its affiliates. all ... · better scalability via multi...
TRANSCRIPT
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. 2
Integrate Your Globally Distributed Databases for Key Cloud Computing Benefits Oracle Database 12c Global Data Services Srinagesh Battula Senior Principal Product Manager - Oracle Cris Pedregal Martin CMTS - Oracle Sarah Brydon Database Engineer - PayPal
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. 3
The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle.
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. 4
Challenges of Databases in Distributed Environments
Introduction to Global Data Services (GDS)
GDS Use Cases, Concepts, and Architecture
Attributes of Global Services
GDS Capabilities: Load Balancing and Failover in a Global Scope
Customer’s GDS Case Study - PayPal
Summary
Agenda
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. 5
Local Standby
Data Center #2 Data Center #1
Active Data Guard
Distributed Environments
RAC Primary Single Instance
Reader Farm
Active Data Guard
Local Standby
Active Data Guard
Local Standby
Active Data Guard
Master Master
Oracle GoldenGate
Active Data Guard
Challenges – No seamless way to
efficiently use all the databases
– No automated load balancing and fault tolerance
– No complete centralized management
Resulting in – Sub-optimal resource
utilization
– Hampered or no enterprise-wide data integration
– Unclear strategy for consolidation versus distribution
Solution A framework that transparently manages client workloads across replicated databases
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. 6
Global Data Services (GDS)
Based on two foundations: – Services: proven concept for dynamic workload management for RAC – Replication: Active Data Guard, Oracle GoldenGate
What it does: – Extends RAC-style failover, load balancing (within and across data centers),
and management capabilities to database services on replicated databases – Takes into account network latency, replication lag, and service placement
This results in: – Higher Availability via service failover across local / global databases – Better Scalability via multi-database integrated load balancing – Better Manageability via centralized administration of global resources
New availability and scalability feature in Oracle Database 12c
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. 7
Application Workload Suitability for GDS GDS is best for applications that: Are replication-aware
– Designed to work in replicated environments Can separate their work into read-only and read-write services
– Example: read-only loads on an Active Data Guard standby Are aware of and avoid or resolve update conflicts
– Example: Oracle GoldenGate multi-master configurations Can tolerate some replication lag
– Many reporting applications can work with slightly out-of-date data
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. 8
Global Data Services Concept
Without GDS
Sales Service Sales Service
GoldenGate GoldenGate
Sales Global Service
With GDS
Unified Framework
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. 9
GDS Use Cases
With Active Data Guard – Service failover and load balancing within local data center – Service failover and load balancing across data centers – Automatic role-based Services upon Data Guard role transitions – Load balancing for reader farms
With Oracle GoldenGate – Load balancing across data centers
Some Examples
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. 10
Active Data Guard
Active Data Guard
Physical standby
GDS Framework
Read Only Service
GDS – Use Case with Active Data Guard Service Failover and Load Balancing within Local Data Center
• Read Write Service runs on Primary
• Read Only Services load balanced across all standby databases
• If a Physical Standby fails, GDS fails over Read Only Service to an available database
• Integrate Active Data Guard replicated databases into a scalable and highly available private data cloud
Physical standby
Read Only Service
Load Load
Primary
Read Write Service
Read Only Service
Load
Connection Pool
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. 11
Active Data Guard
Physical standby
Connection Pool
Active Data Guard
Primary Physical standby
GDS Framework
Connection Pool
Data Center 1 Data Center 2
Read Write Service
Read Only Service
Read Only Service
Read Only Service
GDS – Use Case with Active Data Guard Service Failover and Load Balancing across Data Centers
• Read Write Service runs on Primary
• Read Only Services load balanced across all standby databases
• If a physical Standby fails, GDS fails over Read Only Service to Primary
• Integrate Active Data Guard replicated databases (local and remote) into a scalable and highly available private data cloud
Load Load Load
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. 12
Oracle GoldenGate
Connection Pool
GDS Framework
Connection Pool
Data Center 1 Data Center 2
Master
Read Write Service
Master
GDS – Use Case with GoldenGate (Multi-Master) • Application handles
multi-master conflict resolutions
• Read Write Service load balanced on both Masters
• Integrate Oracle GoldenGate replicated databases (local and remote) into a scalable and highly available private data cloud
Load
Load Balancing across Data Centers
Read Write Service
Read Write Service
Read Write Service
Load
Load
Load
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. 13
Global Data Services - Concepts GDS Region: Group of databases and clients in close network proximity, e.g., East, West GDS Pool: Databases that offer a common set of global services, e.g., HR, Sales Global Service: Database Service provided by multiple databases with replicated data
– Local service + {region affinity, replication lag, database cardinality}
Global Service Manager (GSM): Provides main GDS functionality: service management and load balancing
– Regional listener to the incoming database connections – At least one GSM per region or multiple GSMs for High Availability – All databases/services register to all GSM Listeners
GDS Catalog: stores all metadata, enables centralized global monitoring & management – Global service configuration stored in GDS Catalog
GDSCTL: Command-line Interface to administer GDS
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. 14
Local Standby
Local Standby
Data Center #2 EMEA
Data Center #1 APAC
Active Data Guard
Active Data Guard
Global Data Services Globally Distributed, High Availability Architecture
RAC Primary
Local Standby
Active Data Guard
Single Instance Reader Farm
Active Data Guard
GDSCTL GSM GSM GSM GSM
GDS Catalog Database
Master
• GDS Framework dynamically balances user requests across multiple replicated sites – Based on location, load,
and availability
• Provides global availability – Supports automatic
service failover
• GDS integrates disparate databases into a unified data cloud
GDS Catalog Standby
Master
Oracle GoldenGate
Active Data Guard
SALES POOL (sales_reporting_srvc, sales_entry_srvc)
HR POOL(hr_apac_srvc, hr_emea_srvc)
All GDS databases connected to all GSMs
GSM - Global Service Manager
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. 15
GDS Configuration Flow
Cloud Catalog DB
Pool Database
1. GDSCTL connects to catalog DB via GSM listener
2. GSM routes request to catalog
3. GDSCTL establishes connection to catalog DB
4. GDSCTL modifies the catalog
5. Catalog notifies GSMs of changes
Pool Database
6. Master GSM modifies Pool Databases
GSM GSM
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. 16
Client Connectivity in GDS
(DESCRIPTION=
(FAILOVER=on)
(ADDRESS_LIST=
(LOAD_BALANCE=ON)
(ADDRESS=(global_protocol_address_information))
(ADDRESS=(global_protocol_address_information)))
(ADDRESS_LIST=
(LOAD_BALANCE=ON)
(ADDRESS=(global_protocol_address_information))
(ADDRESS=(global_protocol_address_information)))
(CONNECT_DATA=
(SERVICE_NAME=global_service_name)
(REGION=region_name)))
Clients connect to GSM listener instead of to the database listener GDS forwards the connection to the local
listener (bypassing the SCAN listeners)
GSM listeners endpoints must be specified Client will load balance among local GSMs
and use the remote GSMs if all the local GSMs are unavailable
Clients specify global service name and which region they want to connect
All current FAN events (instance, service, net, node - up/down) are supported
APAC’s GSMs
EMEA’s GSMs
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. 17
Global Service Manager (GSM) Maintains GDS configuration Manages cardinality and failover of global services Measures network latency between its own and other regions and
exchanges this information with other regions’ GSMs Performs connection load balancing based on Connection Load
Balancing metrics (from database instances), network latency, region Monitors database instances, generates and publishes normalized
Runtime Load Balancing events for clients in local region
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. 18
Challenges of Databases in Distributed Environments
Introduction to Global Data Services (GDS)
GDS Use Cases, Concepts, and Architecture
Attributes of Global Services
GDS Capabilities: Load Balancing and Failover in a Global Scope
Customer’s GDS Case Study - PayPal
Summary
Agenda
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. 19
Service Placement
Preferred Databases: designated to provide the Global Service – The number of preferred databases defines the cardinality of the Global Service
Available Databases: provide Global Service if not enough Preferred are running
– If one of the preferred databases fails, then GSM maintains the cardinality of the Global service by starting the service on an available database
Preferred_All: All the databases in a Pool are used for the Global Service Role-based Global Service
– Can be started on a database if its role is the global service’s role attribute – Oracle Clusterware not required for this scenario
Attributes of Global Services
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. 20
Replication Lag for Active Data Guard
An asynchronous standby may lag behind its primary database Applications may choose between real-time vs. slightly out-of-date data Applications can set maximum acceptable lag limit for a Global Service GDS routes requests to replicas whose replication lag is below the limit When replication lag exceeds the lag limit, service is brought down New requests are routed to a database that satisfies the lag limit
Attributes of Global Services
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. 21
Region Affinity
For Local-Region affinity, services are restricted to the local region – Regardless of load, GDS will not route to databases in other regions
For Any-Region affinity, client connections and work requests are routed to any region for load balancing or failover For Local with Inter-Regional Failover affinity, client connections and
work requests are routed to another region in the following cases: – Singleton services (for example, only one master site for update) – All databases in a region have failed
Attributes of Global Services
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. 22
Challenges of Databases in Distributed Environments
Introduction to Global Data Services (GDS)
GDS Use Cases, Concepts, and Architecture
Attributes of Global Services
GDS Capabilities: Load Balancing and Failover in a Global Scope
Customer’s GDS Case Study - PayPal
Summary
Agenda
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. 23
Global Service Failover
When a global service fails, GDS will restart it on an available database in the cloud (across regions) Notifications will be sent so that client connection pools can reconnect to new
database – Allows synchronized failover of mid-tiers and applications – Can support all connection pools or applications that can process FAN events
GDS Catalog ensures consistent view of the configuration across the cloud GDS supports role-based global services
– Automatically starts a global service only when db role matches the role specified for the service
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. 24
Global Service Failover
Sales-2
Connection Pools have established connections to Sales-1 Database with the service SALES
Sales-1 Workloads are redirected to Sales-2 database
Global Service : SALES
App Server
Global Service : SALES
Clients connected to the Application Server
GSM via Oracle Notification Services (ONS) notifies connection pool that service SALES is UP with database Sales-2
GSM finds another database to service SALES
GSM starts service SALES
GSM
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. 25
Global Connection Load Balancing (CLB)
CLB balances connection requests across GSM listeners – includes connect-time failover
Client tries to connect to any of the local-region GSMs first – If local GSMs don’t respond, client tries a GSM in another region
TNS-entries must contain two lists of addresses: – one list of local GSMs for load balancing and intra-region failover, and – another list of addresses for remote GSMs for inter-region failover
Client-Side Load Balancing
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. 26
Global Connection Load Balancing (GCLB)
Every GSM receives load statistics from all databases in the GDS pool and measures network latency between regions to provide CLB functionality GSM Listener directs connection requests
to the best database in the GDS cloud Server-side CLB goals
– “LONG” for applications with long-lived connections e.g. connection pools and SQL*Forms sessions
– “SHORT” for applications with short-lived connections
Server-side Load Balancing
DB5 (RAC)
DB1 GSM
Client Connection
Pool
CLB
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. 27
Client Connections Server-side Load Balancing
Sales-2
1.Client connects to a random GSM in the same region (sales_read_service.salespool.oradbcloud)
2. Based on CLB information, GSM redirects client to an optimal instance.
SHORT, LONG REGION Affinity Instance Performance
Sales-1
All databases connected to all GSMs
Global Service : SALES_READ_SERVICE Global Service : SALES_READ_SERVICE
GSM GSM
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. 28
Global Runtime Load Balancing (RLB) GDS supports balancing of work requests at runtime for a global
service GSM receives per-service performance data from all database
instances in the cloud – Measures inter-region network latency – Creates an array that specifies what percentage of client requests
each instance should get – Sends the array to regional clients as RLB event via ONS Channels*
Allows client connection pools to route database requests based on real-time load information
* OCI and ODP.NET will be using ONS instead of AQ in 12.1 – simplifying configuration
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. 29
Client Redirection Run-time Load Balancing
Sales-2
Client has established connection to the service (CLB enabled by GSM) and workloads are directed to this database instance
As a Master GSM, compute and publish FAN RLB events as an array of normalized % of clients to services.
Sales-1
All databases connected to all GSMs and provides performance information
RLB based on SERVICE_TIME, THROUGHPUT, Instance Performance, other GSM parameters
Workload redirected based on RLB
GSM
GSM
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. 30
GDS Runtime Load Balancing Graph (I) Standalone Identical Database Servers - Simple External Load
Routing responds gracefully to changing system conditions
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. 31
GDS Runtime Load Balancing Graph (II) Standalone Asymmetrical Database Servers - No External Load DB b: 4 CPUs DB c: 3 CPUs DB d: 2 CPUs
GDS does intelligent load balancing even across asymmetrical database servers
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. 32
Challenges of Databases in Distributed Environments
Introduction to Global Data Services (GDS)
GDS Use Cases, Concepts, and Architecture
Attributes of Global Services
GDS Capabilities: Load Balancing and Failover in a Global Scope
Customer’s GDS Case Study - PayPal
Summary
Agenda
Who am I?
• Oracle/Unix DBA since 1996
• Worked with every Oracle version from 7.1 on
• Oracle Certified Master (and more) – Oracle Certified Professional 7, 8, 8i, 9i, 11g; Managing
Oracle on Linux; Oracle Certified Master
• Specialist in RAC deployments, 24x7 environments, Oracle security
• Member of the Paypal Database Engineering team
34
Tier-1 Oracle Database HA at PayPal (2012)
35
Data Guard Redo Transport
GoldenGate Replication
Active Data Guard Standby • Offload queries – eg balance, other
payment-related queries, industry-specific analytics, etc.
Mission-critical Payment Processing Databases Supporting up to 300K SQL executions per sec
Primary Data Center
Data Guard Cascaded Redo Transport
DR Data Center Data Guard ASYNC Redo Transport
ETL Targets
Production Databases • RAC, ASM, FRA • 10-40 TB
Active Data Guard Standby • Offload queries and reads
Active Dataguard Standby • Supports DR and batch, ETL
WAN, 650+ miles
GoldenGate
ETL Targets
PayPal’s Business Challenge • Support read services on multiple Active Data Guard
databases
• Meet defined SLAs for lag on read-only services
• Manage services in multiple data centers – Balance load across Active Data Guard copies – direct connections to local region
• Service location transparency to clients – Manage service availability during planned maintenance – Relocate primary database and perform tech refreshes ‘in the
cloud’ 36
The Case for Global Data Services
• Simple, centralized management of services – Define the service once in GDS and specify all preferred
and available databases – Data Guard Broker integration for role-aware service
definitions
• Performance management – Specify a maximum lag and the service will automatically
be disabled if the lag is exceeded – Connection and Runtime Load Balancing options – Region affinity for global services with inter-region failover
37
PayPal Lab setup – Oracle Database 12c Beta
38
Data Guard Redo Transport
ASYNC
GDSCAT
ADG STANDBY (LABLNXC) PRIMARY (LABLNXA) ADG STANDBY (LABLNXB)
GSM
11.2 jdbc clients,no UCP 12.1 jdbc thin clients , UCP read connections
11.2 jdbc clients,no UCP 12.1 jdbc thin clients , UCP read connections
Databases ------------------------ lablnxa lablnxb lablnxc Services ------------------------ srv_lablag15 srv_labroregion srv_labrw (primary read-write service)
Region C Region B
Simple, centralized management -- add a service once in GDSCTL and it deploys to every appropriate instance
add service -service srv_lablag15 -gdspool lab -preferred lablnxb,lablnxc -available lablnxa -role PHYSICAL_STANDBY -lag 15 -loadbalance LONG
add service -service srv_roregion -gdspool lab -preferred lablnxb,lablnxc -available lablnxa -role PHYSICAL_STANDBY -loadbalance LONG -locality LOCAL_ONLY -region_failover
GDSCTL>services … Service "srv_lablag15.lab.oradbcloud" has 2 instance(s). Affinity: ANYWHERE Instance "lab%17", name: "LABLNXC", db: "lablnxc", region: "scfc", status: ready. Instance "lab%9", name: "LABLNXB", db: "lablnxb", region: "scfb", status: ready. Service "srv_roregion.lab.oradbcloud" has 2 instance(s). Affinity: LOCALPREF Instance "lab%17", name: "LABLNXC", db: "lablnxc", region: "scfc", status: ready. Instance "lab%9", name: "LABLNXB", db: "lablnxb", region: "scfb", status: ready.
-- location neutral connection strings
jdbc:oracle:thin:@<gsm address and failover settings> (PORT=1571)))(CONNECT_DATA=(SERVICE_NAME=srv_roregion.lab.oradbcloud)(REGION=scfb)))
39
Summary
• True enterprise-wide management of services
• Manage services in the cloud by abstracting database connection strings
• Region-aware services supports the growing need for management of services across databases that may be physically widely separated
• Smart integration with broker configurations to leverage Active Data Guard databases
40
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. 41
Challenges of Databases in Distributed Environments
Introduction to Global Data Services (GDS)
GDS Use Cases, Concepts, and Architecture
Attributes of Global Services
GDS Capabilities: Load Balancing and Failover in a Global Scope
Customer’s GDS Case Study - PayPal
Summary
Agenda
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. 43
GDS Additional Use Cases
With Active Data Guard – Service failover and load balancing within local data center – Service failover and load balancing across data centers – Automatic role-based services upon Data Guard role transitions – Load balancing for reader farms
With Oracle GoldenGate – Load balancing across data centers
Some Examples
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. 44
Active Data Guard
Primary Physical standby
GDS Framework
Connection Pool
GDS – Use Case with Active Data Guard Data Guard Role Transition
Read Write Service
• Read Write Service runs on Primary
• Read Only Service runs on Standby
Read Only Service
- Global Service Management (GSM) Listeners
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. 45
Active Data Guard
Primary
GDS Framework
Connection Pool
GDS – Use Case with Active Data Guard Data Guard Role Transition
Read Write Service
Read Only Service
• Read Write Service runs on Primary
• Read Only Service runs on Standby
• Upon Data Guard role change via Broker, GDS fails over Read Write Service to new Primary and Read Only Service to new Standby
• GDS performs automatic role based service management for Data Guard configurations (Oracle Clusterware not needed for this scenario)
Physical standby
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. 46
GDS – Use Case with Reader farms Load Balancing in an Active Data Guard reader farm
Active Data Guard Reader Farm
Primary
Physical standby
Physical standby
Physical standby
Physical standby
Physical standby
GDS Framework
Connection Pool
• Read Write Service runs on Primary
• Read Only Services load balanced over standby database reader farm
• Results in effective utilization of Active Data Guard standby databases Read Only
Service Read Only
Service Read Only
Service Read Only
Service Read Only Service
Read Write Service
Load Load Load Load Load
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. 47
Key Takeaways – Global Data Services
GDS extends RAC-style load balancing, failover, and managing capabilities for distributed environments of replicated databases: – Better Scalability
GDS balances workloads over any set of replicated databases – Higher Availability
GDS can failover Services across local and remote databases – Global Manageability
GDS centralizes management of global resources
GDS is available with Oracle Database 12c Release 1
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. 48 After OpenWorld, visit oracle.com/goto/availability
Key HA Sessions and Demos by Oracle Development Monday, 1 October – Moscone South
12:30p Oracle Data Guard Zero-Data-Loss Protection at Any Distance, 300 12:30p Future of Exadata: OLTP, Warehousing, and Consolidation, 104 1:45p Automating ILM with the Latest Database Technology, 300 1:45p Extracting Data in Oracle GoldenGate Integrated Capture Mode, 102 3:15p Maximize Availability with the Latest Database Technology, 303 3:15p Maximize Enterprise Availability with the Latest DB Technology, 303 4:45p Mission-Critical Oracle Exadata OLTP Deployment at PayPal, 300 4:45p Temporal Database Capabilities with the Latest DB Technology, 300 Tuesday, 2 October – Moscone South 10:15a Database Tables to Storage Bits: Data Protection Best Practices, 300 10:15a GoldenGate & Data Guard: Working Together Seamlessly, 305 11:45a Active Data Guard Zero-Downtime Database Maintenance, 300 11:45a Using Automatic Storage Mgmt with the Latest DB Technology, 301 1:15p The Four Ts of RMAN: Tips, Tuning, Troubleshooting, and … ?, 102 5:00p Maximum Availability Architecture Best Practices for Exadata, 303
Wednesday, 3 October – Moscone South 10:15a Operational Best Practices for Oracle Exadata, 102 10:15a Maximize Availability by Minimizing Disruption for End Users and Application, 301 11:45a What’s New in the Latest Generation of Oracle RAC, 301 11:45a Best Practices for HA w/ GoldenGate on Oracle Exadata, 102 1:15p Oracle Secure Backup: Integration Best Practices with Engineered Systems, 300 1:15p Application MAA Best Practices on Oracle Private Clouds, 200 5:00p Tuning &Troubleshooting Oracle GoldenGate on Oracle, 102 Thursday, 4 October – Moscone South 11:15a Integrate Your Globally Distributed Databases for Key Cloud Computing Benefits, 300 12:45p Backup and Recovery of Oracle Exadata: Experiences and Best Practices, 300
Demos – Mon 10:00a-6:00p - Tue 9:45a-6:00p - Wed 9:45a-4:00p Oracle Maximum Availability Architecture, S-011 GoldenGate 11gR2: Real-Time, Transactional DB Replication, S-027 Oracle Database 12c: Global Data Services, S-010 Oracle Database 12c Application Continuity - S-009
Oracle Secure Backup, S-014 Oracle Active Data Guard, S-007 Oracle Recovery Manager and Oracle Flashback Technologies, S-019 Oracle Real Application Clusters and Oracle RAC One Node - S-008 Oracle Database 12c Xstream, Streams, Advanced Queing, S-018
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. 49
Resources OTN HA Portal:
http://www.oracle.com/goto/availability
Maximum Availability Architecture (MAA): http://www.oracle.com/goto/maa
MAA Blogs: http://blogs.oracle.com/maa
Exadata on OTN: http://www.oracle.com/technetwork/database/exadata/index.html
Oracle HA Customer Success Stories on OTN: http://www.oracle.com/technetwork/database/features/ha-casestudies-098033.html